jon*_*lpy 16 c++ unsigned sizeof bitset
我正在研究C++中的一些简单的位操作问题,并在尝试可视化我的步骤时遇到了这个问题.我知道分配给不同基元类型的位数可能因系统而异.对于我的机器,sizeof(int)输出4,所以我的char价值有4 位.我现在也知道一个字节的定义通常是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
Run Code Online (Sandbox Code Playgroud)
如果我想要,我可以增加bitset大小:
int max=~0;
std::cout<<std::bitset<sizeof(int)*CHAR_BIT*3>(max)<<std::endl;
$:000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)
为什么有这么多?我本来期望只有32个,用零填充.相反,有两倍,发生了什么?
当我重复实验unsigned int,其大小相同时int,额外的实验不会出现:
unsigned int unmax=~0;
std::cout<<std::bitset<sizeof(unsigned int)*CHAR_BIT*3>(unmax)<<std::endl;
$:000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111
Run Code Online (Sandbox Code Playgroud)
Fra*_*ank 20
std::bitset取一个构造函数unsigned long long,当你尝试将一个-1(也就是~0一个int)分配给一个时unsigned long long,你得到8个字节(64位)的1s.
它不会发生unsigned int因为你正在分配值4294967295而不是-1,这是一个32 1sunsigned long long