如何在这 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 位会导致二进制数 100000000000000000000000
即 0x800000
.
0xff00
的二进制等价物是 0b1111111100000000
。将它移动 8 位导致 0b111111110000000000000000
.
左移和右移实际上作用于数字的二进制等值而不是十六进制等值。如您所见,二进制等价物的位数比十六进制等价物多。
但是假设我们要进行 0x80000000 >> 100
那么 100 次移位将超过二进制数字的数量,因此结果将是 0x0
.
在左移的情况下,每次左移操作都会添加额外的零。
我正在修改我的一些学习资源,我遇到了 2 个对我来说有点棘手的例子。
1) 一个int值0x80000000>>8的位移结果为0x800000。 0x后的位数等于'8'时如何右移8位?
2) 一个int值0xff00<<8的移位结果是0xff0000。 0x后的位数只有6位时,如何正确按位左移8位?
0x80000000
的二进制等价物是 10000000000000000000000000000000
。
所以将它移动 8 位会导致二进制数 100000000000000000000000
即 0x800000
.
0xff00
的二进制等价物是 0b1111111100000000
。将它移动 8 位导致 0b111111110000000000000000
.
左移和右移实际上作用于数字的二进制等值而不是十六进制等值。如您所见,二进制等价物的位数比十六进制等价物多。
但是假设我们要进行 0x80000000 >> 100
那么 100 次移位将超过二进制数字的数量,因此结果将是 0x0
.
在左移的情况下,每次左移操作都会添加额外的零。