【发布时间】:2019-05-29 08:41:53
【问题描述】:
为什么 3 右移 32 等于 3 而不是 0。
我在 nodeJs 和 Java 中得到了这些结果
- 3 >> 31 = 0
- 3 >> 32 = 3
- 3 >> 33 = 1
- 3 >> 34 = 0
- 3 >> 35 = 0
【问题讨论】:
-
C++ 不是 NodeJs 和 Java。
-
这是未定义的行为。
-
没有移位值的运行时检查,大于 32 的移位取决于处理器行为。所以对于语言来说,这是未定义的行为。最有可能的是,指令字段中只有 5 位来指定移位,并且只保留移位值的 5 LSB。所以 >>32 等价于 >>0,>>33 等价于 >>1 等等。
-
左移 n
-
它看起来像一些循环移位:int32 的长度是 32。所以对于大于或等于 32 的 shif 会发生这样的事情:val >> (shift % 32)。对于 32,它将是 0 和 3 >> 0 = 3,对于 33,移位将是 33 % 32 = 1 -> 3 >> 1 = 1。
标签: java node.js bitwise-operators bit-shift