我在 c 中有一个小查询,
我正在对数字 69 使用按位左移,即01000101
以二进制形式
01000101 << 8
我得到的答案是100010100000000
难道不应该是全8个零吗?00000000
我们将所有 8 位左移,然后用零填充。
这是因为数字的文字(默认数据类型)(int
) 在当今大多数 CPU 中,大于8-bit
(通常32-bit
),因此当您申请时
69 << 8 //note 69 is int
实际上是这样应用的
00000000 00000000 00000000 01000101 << 8
这样你就得到了结果
00000000 00000000 01000101 00000000
如果你使用,比如说,unsigned char
具体来说,那么它就不会发生:
unsigned char a = 69 << 8; //resulting in 0
这是因为虽然69 << 8
本身仍然会导致
01000101 00000000
但上面的值将被转换为8-bit
unsigned char
, 导致:
00000000
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)