c - 所有 8 位的移位会发生什么

标签 c bitwise-operators bit-shift

我在 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/

相关文章:

assembly - 使用 MIPS 汇编中的逻辑移位乘以 2 的幂

c - 打印文件的二进制表示

无法弄清楚这个硬件作业,有人可以帮忙吗? [C]

c - 如何正确使用 SO_KEEPALIVE 选项来检测另一端的客户端是否已关闭?

java - Java 中的 24 位到 32 位转换

javascript - 如何在 PHP 中实现 JS 风格的按位左移运算符?

c - 右移 signed int 是否为 8 * sizeof(int) 或更多未定义?

c - 如果从标准输入读取,刷新标准输出似乎没有效果

python - 如何在python中获得逻辑正确的二进制移位

c - 为什么将变量移位超过其位宽度会清零?