使用此代码时:
unsigned char c=1023;
std::bitset <32> x((int)c);
std::cout<<x<<std::endl;
输出是:
00000000000000000000000011111111
为什么不使用在类型转换后可以使用的整个4个字节(因为1023需要10位但char只有8个),我的意思是,在这段代码中:
char c=68;
cout<<sizeof(c)<<endl<<sizeof((int) c)<<endl;
输出是:
1
4
如果在类型转换后大小发生变化那么为什么它不能用更多的位?
答案 0 :(得分:1)
您的代码做了什么(我认为unsigned char
是8位类型)?
unsigned char c=1023;
这里,由于unsigned char
是8位,因此1023不适合。因此,根据标准c
值将是1023模256 = 255(即1023的最高2位丢失)。
std::bitset <32> x((int)c);
在此,您将c
投射到int
。请注意,此处 c
不会“返回”其丢失的位,因此投射结果将为255.
当然,cout将以二进制打印255,这就是你得到的。