Я работаю над некоторыми проблемами с небольшими манипуляциями в C++ и сталкивался с этим, пытаясь визуализировать мои шаги. Я понимаю, что количество бит, присвоенных различным примитивным типам, может варьироваться от системы к системе. Для моей машины sizeof(int)
выводит 4
, поэтому у меня есть 4 char
бит для моей стоимости. Я также знаю теперь, что определение байта обычно составляет 8 бит, но это не обязательно так. Когда я CHAR_BIT
я получаю 8
. Поэтому я ожидаю, что для моих значений int
будет в общей сложности 32 бита.
Затем я могу продолжить и напечатать двоичное значение моего int
на экране:
int max=~0; //All my bits are turned on now
std::cout<<std::bitset<sizeof(int)*CHAR_BIT>(max)<<std::endl;
$:11111111111111111111111111111111
Я могу увеличить размер бита, если хочу:
int max=~0;
std::cout<<std::bitset<sizeof(int)*CHAR_BIT*3>(max)<<std::endl;
$:000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111
Почему их так много? Я ожидал, что у меня будет всего 32, с нулями. Вместо этого в два раза больше, что происходит?
Когда я повторяю эксперимент с unsigned int
, который имеет тот же размер, что и int
, лишние не появляются:
unsigned int unmax=~0;
std::cout<<std::bitset<sizeof(unsigned int)*CHAR_BIT*3>(unmax)<<std::endl;
$:000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111