проблема с набором битов c ++ с выводом - PullRequest
0 голосов
/ 05 июня 2011

Я работал с bitset, и поэтому мне было интересно, как лучше конвертировать base-10 в base-2, потому что по какой-то причине я получаю неправильный ответ: давая число 19, я бы ожидал увидеть: 10011 (16-2-1), почему он выводит (00011)

#include <iostream>
#include <bitset>

using namespace std;

int main() {

    bitset<sizeof(int)> temp(19);
    for (int x = 4; x>=0;x--) 
        cout << temp[x];
    cout << endl;
    system("pause");
    return 0;
}

Ответы [ 3 ]

2 голосов
/ 05 июня 2011

Вы объявляете temp как битовый набор, где sizeof (int) == 4, поэтому он объявляет битовый набор из 4 бит.

Для int 19 требуется 5 бит.

2 голосов
/ 05 июня 2011

sizeof дает количество символов, а не количество бит.sizeof (int), скорее всего, равно 4, и поэтому temp [4] - UB.Используйте bitset<sizeof(int)*CHAR_BIT>.

1 голос
/ 05 июня 2011

В вашем коде была ошибка.Вы не можете получить доступ к элементу по индексу 4, так как размер bitset был равен 4, потому что sizeof( int ) дал 4, что позволяет получить доступ только с 0-3.Что касается вашего вопроса, аргумент шаблона в скобках <> - это размер набора битов.В вашем случае 19 представляется более чем 4 битами, следовательно, результат был усечен.Измените аргумент на 5, вы должны получить ожидаемый результат.Кстати, bitset уже перегружен оператор <<, поэтому вам на самом деле не нужно обходить весь массив для вывода результата.Это должно сделать работу: </p>

#include <iostream>
#include <bitset>

using namespace std;

int main() {
    bitset<5> temp(19);
    cout << temp;
    return 0;
} 
...