我正在处理 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
如果我愿意,我可以增加 bitset 大小:
int max=~0;
std::cout<<std::bitset<sizeof(int)*CHAR_BIT*3>(max)<<std::endl;
$:000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111
为什么会有这么多?我本来希望只有 32 个,用零填充。反而多了两倍,怎么回事?
当我用与 int
大小相同的 unsigned int
重复实验时,多余的不会出现:
unsigned int unmax=~0;
std::cout<<std::bitset<sizeof(unsigned int)*CHAR_BIT*3>(unmax)<<std::endl;
$:000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111
最佳答案
std::bitset
的构造函数采用 unsigned long long
,当您尝试分配 -1 时(即 ~0
在 int
) 到 unsigned long long
中,你会得到 8 个字节(64 位),相当于 1s。
unsigned int
不会发生这种情况,因为您分配的值是 4294967295 而不是 -1,即 unsigned long long
关于c++ - 为什么 std::bitset 建议的可用位比 sizeof 所说的更多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49973206/