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
归档时间: |
|
查看次数: |
1157 次 |
最近记录: |