如何在这 3 种情况下正确地进行位移?

How to properly make a bitwise shift in this 3 cases?

我正在修改我的一些学习资源,我遇到了 2 个对我来说有点棘手的例子。

1) 一个int值0x80000000>>8的位移结果为0x800000。 0x后的位数等于'8'时如何右移8位?

2) 一个int值0xff00<<8的移位结果是0xff0000。 0x后的位数只有6位时,如何正确按位左移8位?

0x80000000 的二进制等价物是 10000000000000000000000000000000。 所以将它移动 8 位会导致二进制数 1000000000000000000000000x800000.

0xff00 的二进制等价物是 0b1111111100000000。将它移动 8 位导致 0b111111110000000000000000.

左移和右移实际上作用于数字的二进制等值而不是十六进制等值。如您所见,二进制等价物的位数比十六进制等价物多。

但是假设我们要进行 0x80000000 >> 100 那么 100 次移位将超过二进制数字的数量,因此结果将是 0x0.

在左移的情况下,每次左移操作都会添加额外的零。