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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
ummahusla
1 / 1 / 0
Регистрация: 19.06.2012
Сообщений: 46
#1

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

10.10.2012, 15:23. Просмотров 1151. Ответов 6
Метки нет (Все метки)

Нужно написать программу, которая будет неоднократно запрашивать целое число и будет отображать его в двоично числе в 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++ для начинающих.

Спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2012, 15:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевод бинарного номера в 32/8 бит код (C++):

Исправить код бинарного дерева - C++
#include &lt;stdlib.h&gt; #include &lt;iostream&gt; struct uzel { int key;//хранится в вершине ключ-значение struct uzel...

перевод десятичного вещественного в машинный код(двоичный код) - C++
пожалуйста , подскажите пожалуйста код C++ ,для перевода вещественного числа в машиное (двоичное представление,32 бит). Без использования...

Бит 8, младший и старший бит (по книге) - C++
Добрый день. Вот читаю книгу, и не пойму элементарной на первый взгляд вещи. Как понять следующие предложения: 1) Если бит...

Код Хаффмана реализованный через построение бинарного дерева - C++
Здравствуйте, есть код Хаффмана реализованный через построение бинарного дерева, узлами которого является элемент типа map ,либо символ и...

нужно написать програмный код для решения задачи создания бинарного файла - C++
:cry: Написать програмный код для решения задачи создания бинарного файла.

Создание бинарного дерева из бинарного файла - C++
struct Bin { string name; string city; int players; int score; }; void ReadFromBin(Point*&amp; Tree) { Bin q;

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Psilon
Master of Orion
Эксперт .NET
5891 / 4788 / 634
Регистрация: 10.07.2011
Сообщений: 14,406
Записей в блоге: 5
Завершенные тесты: 4
10.10.2012, 16:23 #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;
}
1
ummahusla
1 / 1 / 0
Регистрация: 19.06.2012
Сообщений: 46
10.10.2012, 16:25  [ТС] #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;
}
Спасибо, а можно было бы пояснить немного, что к чему? Просто хочу понять..
0
Кот Ангенс
317 / 267 / 38
Регистрация: 24.05.2012
Сообщений: 629
10.10.2012, 16:27 #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;
    }
}
0
Psilon
Master of Orion
Эксперт .NET
5891 / 4788 / 634
Регистрация: 10.07.2011
Сообщений: 14,406
Записей в блоге: 5
Завершенные тесты: 4
10.10.2012, 16:32 #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
0
ummahusla
1 / 1 / 0
Регистрация: 19.06.2012
Сообщений: 46
10.10.2012, 18:52  [ТС] #6
Пробую запустить этот код, не работает


http://grab.by/gFhW - вот какая ошибка вылетает, что делать?
0
Psilon
Master of Orion
Эксперт .NET
5891 / 4788 / 634
Регистрация: 10.07.2011
Сообщений: 14,406
Записей в блоге: 5
Завершенные тесты: 4
10.10.2012, 19:10 #7
ummahusla, все компилируется:
http://ideone.com/587Z7
А вообще если возникают такие вопросы, лучше что-нибудь почитать (керниган ритчи например)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2012, 19:10
Привет! Вот еще темы с ответами:

Создание бинарного дерево из бинарного файла - C++
struct Bin { string name; string city; int players; int score; }; void ReadFromBin(Point*&amp; Tree) { ...

Построение бинарного дерева на основе не бинарного - C++
В лабораторной работе есть такое задание: Создайте процедуру построения бинарного дерева на основе не бинарного. Объясните как вообще...

Перевод в 16 код - C++
Так работает if (isalpha(mess)) mess=0x20; Так нет if (isalpha(mess)) mess=0x(strlen(mess));

переход с 32 бит на 64 бит - C++
Здравствуйте. Пробую на builder 10 перевести проект с 32 на 64 бит. Возникают странные ошибки: template &lt;typename T&gt; class DOT { ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.10.2012, 19:10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru