【问题标题】:How to properly make a bitwise shift in this 3 cases?如何在这 3 种情况下正确地进行位移?
【发布时间】:2019-07-03 14:44:40
【问题描述】:

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

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

2) 对 int 值 0xff00 进行位移的结果是 0xff0000。 当0x后的位数仅等于6时,如何进行正确的按位8左移?

【问题讨论】:

    标签: bit bit-shift shift


    【解决方案1】:

    0x80000000 的二进制等效项是 10000000000000000000000000000000。 因此,将其移动 8 位会得到一个二进制数 100000000000000000000000,即 0x800000

    0xff00 的二进制等效项是 0b1111111100000000。将其移动 8 位会导致 0b111111110000000000000000

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

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

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

    【讨论】:

    • 哇!很好的解释,现在很清楚了。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2022-12-04
    • 2021-10-31
    • 1970-01-01
    • 2021-09-27
    • 2020-08-06
    • 2012-06-06
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多