как хранить большие двоичные числа в битах (C ++) - PullRequest
0 голосов
/ 01 сентября 2010

Я пытаюсь создать программу для преобразования числа в двоичное.

Код:

    #include<iostream>
    #include<algorithm>
    #include<bitset>
    using namespace std;
    int main()
    {
        int a;
        string k;
        bitset<CHAR_BIT> n;
        cin>>a;
        n=bitset<CHAR_BIT>(a);
        cout<<n<<" ";
            return 0;
   }

Программа дает неправильный ответ для 585, поскольку она содержит более 6 двоичных цифр. Как я могу такие большие числа?

Ответы [ 2 ]

4 голосов
/ 01 сентября 2010

585 мод 256 = 73 (при условии, что CHAR_BIT равен 8)
73 в базе 2 = 0b01001001
Программа печатает 01001001 .
Я не вижу в этом ничего плохого.

Если вы хотите сохранить весь диапазон a, битовый набор должен быть объявлен как

bitset<CHAR_BIT * sizeof(a)> n (a);
0 голосов
/ 01 сентября 2010

Набор битов имеет фиксированное количество битов.Вы указываете bitset<CHAR_BIT> - в большинстве систем CHAR_BIT равен 8, поэтому у вас будет 8-битный набор битов.Когда вы пытаетесь вставить большее число в набор битов, самые значимые биты отбрасываются.

Если вы заранее знаете, какие самые большие числа вам придется иметь дело, вы можете указать, например, bitset<16> или bitset<32>.Если вы этого не сделаете, возможно, вам придется использовать другой тип данных .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...