我在 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
关于c - 所有 8 位的移位会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35615868/