Почему std :: bitset & lt; 8 & gt; переменная не может обработать 11111111?

Почему эта программа показывает следующий вывод?

#include <bitset>
...

{
std::bitset<8> b1(01100100); std::cout<<b1<<std::endl;
std::bitset<8> b2(11111111); std::cout<<b2<<std::endl; //see, this variable
//has been assigned
//the value 11111111
//whereas, during
//execution, it takes
//the value 11000111
std::cout << "b1 & b2: " << (b1 & b2) << '\n';
std::cout << "b1 | b2: " << (b1 | b2) << '\n';
std::cout << "b1 ^ b2: " << (b1 ^ b2) << '\n';
}

Это ВЫХОД:

01000000
11000111
b1 & b2: 01000000
b1 | b2: 11000111
b1 ^ b2: 10000111

Сначала я подумал, что с заголовочным файлом что-то не так (я использовал MinGW), поэтому я
проверено с помощью MSVCC. Но это тоже показало то же самое. Пожалуйста помоги.

14

Решение

Несмотря на внешний вид, 11111111 десятичный. Бинарное представление 1111111110 является 1010100110001010110001112. После строительства, std::bitset<8> принимает восемь наименее значимых битов этого: 110001112.

Первый случай аналогичен, за исключением 01100100 восьмеричный (из-за ведущего нуля). То же число, выраженное в двоичном 10010000000010000002.

Один из способов представления набора битов со значением 111111112 является std::bitset<8> b1(0xff),

Кроме того, вы можете создать набор битов из двоичной строки:

std::bitset<8> b1(std::string("01100100"));
std::bitset<8> b2(std::string("11111111"));
48

Другие решения

Согласно ответу NPE, вы строите bitset с unsigned longи не с битами, как вы ожидали. Альтернативный способ построить его, который позволяет вам указать биты, заключается в использовании string конструктор следующим образом:

#include <bitset>
#include <cstdio>
#include <iostream>

int main()
{
std::bitset<8> b1(std::string("01100100")); std::cout<<b1<<std::endl;
std::bitset<8> b2(std::string("11111111")); std::cout<<b2<<std::endl;
std::cout << "b1 & b2: " << (b1 & b2) << '\n';
std::cout << "b1 | b2: " << (b1 | b2) << '\n';
std::cout << "b1 ^ b2: " << (b1 ^ b2) << '\n';
getchar();
return 0;
}

кликните сюда просмотреть вывод.

7

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector