我试图了解 JavaScript 中右移 (>>) 运算符的工作原理,尤其是在处理负数时。我知道左移运算符 (<<) effectively multiplies the number by powers of 2. For example:
12 << 1
给出 24
(相当于 12 * 2
)。12 << 3
给出 96
(相当于 12 * 2 * 2 * 2
)。-12 << 3
给出-96
。但是当涉及到右移运算符时,我遇到了一些意想不到的结果。我知道右移会将数字除以 2:
12 >> 1
给出 6
,这是有道理的。
但是当我用负数尝试时:
-27 >> 1
给出了-14
,但我期待着-13
。
关于右移如何处理负数,我是否遗漏了什么?
因为你用的是带符号的2的补码来表示负数
27 在有符号 2 的补码中是 0000000000011011,假设您使用的是 16 位,如果您应用 27>>1,您将得到 0000000000001101,即 13
-27 在有符号 2 的补码中是 1111111111100101,如果你应用 -27>>1,你会得到 1111111111110010,即 -14(最左边的位将始终是 1,因为它是负数)