【发布时间】:2019-07-03 14:44:40
【问题描述】:
我正在修改我的一些学习资源,我遇到了 2 个对我来说有点棘手的例子。
1) int 值 0x80000000>>8 的位移结果是 0x800000。 0x后的位数等于'8'时如何右移8位?
2) 对 int 值 0xff00 进行位移的结果是 0xff0000。 当0x后的位数仅等于6时,如何进行正确的按位8左移?
【问题讨论】:
我正在修改我的一些学习资源,我遇到了 2 个对我来说有点棘手的例子。
1) int 值 0x80000000>>8 的位移结果是 0x800000。 0x后的位数等于'8'时如何右移8位?
2) 对 int 值 0xff00 进行位移的结果是 0xff0000。 当0x后的位数仅等于6时,如何进行正确的按位8左移?
【问题讨论】:
0x80000000 的二进制等效项是 10000000000000000000000000000000。
因此,将其移动 8 位会得到一个二进制数 100000000000000000000000,即 0x800000。
0xff00 的二进制等效项是 0b1111111100000000。将其移动 8 位会导致 0b111111110000000000000000。
左移和右移实际上适用于数字的二进制等价物,而不是十六进制等价物。如您所见,二进制等价物的位数比十六进制等价物多。
但是假设我们要执行0x80000000 >> 100,那么 100 次移位将超过二进制位数,因此结果将是 0x0。
在左移情况下,每次左移操作都会添加额外的零。
【讨论】: