Форум программистов, компьютерный форум CyberForum.ru

Перевод бинарного номера в 32/8 бит код - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
ummahusla
 Аватар для ummahusla
1 / 1 / 0
Регистрация: 19.06.2012
Сообщений: 46
10.10.2012, 15:23     Перевод бинарного номера в 32/8 бит код #1
Нужно написать программу, которая будет неоднократно запрашивать целое число и будет отображать его в двоично числе в 32 битном коде. Прога будет заканчиватся, когда будет введённо 9999.

Пример:
Enter integer: 16
00000000000000000000000000010000
Enter integer: -1
11111111111111111111111111111111
Enter integer: 9999


На этом этапе у меня получился код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include "stdafx.h"
#include <iostream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
 
int dec;
 
while (dec!=9999)
{
 
 
char bin32[] = "00000000000000000000000000000000";
for (int pos = 31; pos >= 0; --pos)
{
if (dec % 2) 
bin32[pos] = '1';
dec /= 2;
}
 
cout << "The binary of the given number is: " << bin32 << endl;
 
cout << "Enter the decimal to be converted: ";
cin >> dec;
 
}
 
 
 
}

Этот код работает только на простые числа, на негативные числа я не понимаю как написать..
Далее я не понимаю, и прошу вашей помощи в следующем:

Всё относится к тому же заданию, что и выше:

Мне нужно использовать один из операторов сдвига (<< или >>) и побитные AND и & (не &&). Если честно дальше задание, я не особо понимаю, но как я понимаю, основная идея заключается в том чтобы поработать с AND и маской. И как написать алгоритм из 32битного кода в 8бит

пример:

Number 01110010
Mask 10000000
AND'ed = 00000000

Далее, если результат ANDинговых данных с маской не являается нуль - принтить "1", else "0". Теперь можно переложить маску на один бит вправо (>>) и повторить AND

пример
number 01110010
mask 01000000
AND'ed = 01000000


Очень вас прошу, помогите разобратся, ибо только взялся за обучения этого языка программирования и поэтому много вопросов. Очень надеюсь что вы поможете с этой задачкой и если, вдруг вы знаете, толковые книги по C++ для начинающих.

Спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Psilon
Master of Orion
 Аватар для Psilon
5738 / 4686 / 619
Регистрация: 10.07.2011
Сообщений: 14,160
Записей в блоге: 5
Завершенные тесты: 4
10.10.2012, 16:23     Перевод бинарного номера в 32/8 бит код #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
 
using namespace std;
 
 
int GetIntFromBitArray(string s)
{
    int result = 0;
    while (s.length() < 32)
        s = '0' + s;
    for(int i = 0; i < 32; i++)
    {
        if ((s[i] != '0') && (s[i] != '1')) return 0;
        result <<=1;
        result += s[i] - '0';
    }
    return result;
}
 
 
int main()
{
    string input;
    int x;
    cout << "Input a string"<< endl; //1111
    cin >> input;
    x = GetIntFromBitArray(input); //15
    cout << x;
    return 0;
}
ummahusla
 Аватар для ummahusla
1 / 1 / 0
Регистрация: 19.06.2012
Сообщений: 46
10.10.2012, 16:25  [ТС]     Перевод бинарного номера в 32/8 бит код #3
Цитата Сообщение от Psilon Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
 
using namespace std;
 
 
int GetIntFromBitArray(string s)
{
    int result = 0;
    while (s.length() < 32)
        s = '0' + s;
    for(int i = 0; i < 32; i++)
    {
        if ((s[i] != '0') && (s[i] != '1')) return 0;
        result <<=1;
        result += s[i] - '0';
    }
    return result;
}
 
 
int main()
{
    string input;
    int x;
    cout << "Input a string"<< endl; //1111
    cin >> input;
    x = GetIntFromBitArray(input); //15
    cout << x;
    return 0;
}
Спасибо, а можно было бы пояснить немного, что к чему? Просто хочу понять..
Кот Ангенс
 Аватар для Кот Ангенс
317 / 267 / 37
Регистрация: 24.05.2012
Сообщений: 629
10.10.2012, 16:27     Перевод бинарного номера в 32/8 бит код #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <bitset>
#include <iostream>
 
using namespace std;
 
int main() {
    bitset<32> bs;
    int t;
    char i;
    while (cin >> t, t != 9999) {
        bs = t;
        i = 31;
        do
            cout << bs[i];
        while (i--);
        cout << endl;
    }
}
Psilon
Master of Orion
 Аватар для Psilon
5738 / 4686 / 619
Регистрация: 10.07.2011
Сообщений: 14,160
Записей в блоге: 5
Завершенные тесты: 4
10.10.2012, 16:32     Перевод бинарного номера в 32/8 бит код #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int GetIntFromBitArray(string s)
{
    int result = 0;
    while (s.length() < 32) //Если число имеет вид 1111, приводим к виду 000...0001111
        s = '0' + s;
    for(int i = 0; i < 32; i++)
    {
        if ((s[i] != '0') && (s[i] != '1')) return 0; //Если строка состоит не только из нулей и единиц, то выходим
        result <<=1; //Делаем побитовый сдвиг влево, чтобы уже записанные биты не трогать
        result += s[i] - '0'; 
/* Записываем 0 или 1 в зависимости от того, что у нас в строке. 
 * Вычитаем код нуля чтобы в итоге получился 0 физически 
 * (т.к. если написать просто result += s[i], он будет складывать не сам ноль, 
 * а его код, в ascii-таблице это 48). 
 */
    }
    return result;
}
Попробуйте на бумажке это повторить. Если конечно понимаете, что такое побитовый сдвиг.
http://ru.wikipedia.org/wiki/%D0%9F%...B2%D0%B8%D0%B3
ummahusla
 Аватар для ummahusla
1 / 1 / 0
Регистрация: 19.06.2012
Сообщений: 46
10.10.2012, 18:52  [ТС]     Перевод бинарного номера в 32/8 бит код #6
Пробую запустить этот код, не работает


http://grab.by/gFhW - вот какая ошибка вылетает, что делать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2012, 19:10     Перевод бинарного номера в 32/8 бит код
Еще ссылки по теме:

C++ Перевод строки в бинарный код
C++ Код Хаффмана реализованный через построение бинарного дерева
C++ Перевод в 16 код

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Psilon
Master of Orion
 Аватар для Psilon
5738 / 4686 / 619
Регистрация: 10.07.2011
Сообщений: 14,160
Записей в блоге: 5
Завершенные тесты: 4
10.10.2012, 19:10     Перевод бинарного номера в 32/8 бит код #7
ummahusla, все компилируется:
http://ideone.com/587Z7
А вообще если возникают такие вопросы, лучше что-нибудь почитать (керниган ритчи например)
Yandex
Объявления
10.10.2012, 19:10     Перевод бинарного номера в 32/8 бит код
Ответ Создать тему
Опции темы

Текущее время: 06:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru