Operator Shifting

2025 年 1 月 7 日 | 阅读 3 分钟

按位左移运算符 (<<)

左移运算符将数字的位向移动指定的位数。此运算符的符号是 <<。当您写 x<<n 时,其含义是将 x 的位向左移动 n 位。

示例

如果 x=10,则计算 x<<2 的值。

将 x 的值向左移动两位将导致最左边的 2 位丢失。x 的值为 10。10 的二进制表示是 00001010。左移操作的过程在以下示例中解释

观察上面的示例,将位向左移动后,二进制数 00001010(十进制为 10)变为 00101000(十进制为 40)。

按位右移运算符

右移运算符将数字的位向移动指定的 n 位。右移运算符由符号 >> 表示,读作双大于。当您写 x>>n 时,其含义是将 x 的位向右移动 n 位。

>> 向右移动位,同时保留符号位,即最左边的位。最左边的位代表数字的符号。符号位 0 代表正数1 代表负数。因此,对正数执行 >> 后,结果中我们得到一个正值。当我们对负数执行 >> 时,同样得到一个负值

示例

如果 x=10,则计算 x>>2 的值。

将 x 的值向右移动两位将导致最右边的 2 位丢失。x 的值为 10。10 的二进制表示是 00001010。右移操作的过程在以下示例中解释

观察上面的示例,将位向右移动后,二进制数 00001010(十进制为 10)变为 00000010(十进制为 2)。

按位零填充右移运算符 (>>>)

按位零填充右移运算符将数字的位向移动指定的 n 位。符号位用 0 填充。符号 >>> 表示按位零填充右移运算符。

当我们对正数应用 >>> 时,它的输出与 >> 相同。当我们在负数上应用 >>> 时,它会产生一个正数。MSB 被 0 替换。

观察上面的示例,将位向右移动后,二进制数 00100000(十进制为 32)变为 00000100(十进制为 4)。最后三位被移出并丢失。

>> 和 >>> 运算符之间的区别

>>>>> 都用于将位向右移动。区别在于 >> 保留符号位,而 >>> 运算符不保留符号位。要保留符号位,您需要在 MSB 中添加 0。

示例

让我们通过示例查看左移和右移

输出

Bitwise Left Shift: x<<2 = 40
Bitwise Right Shift: x>>2 = 2
Bitwise Zero Fill Right Shift: x>>>2 = 2
Bitwise Zero Fill Right Shift: y>>>2 = 1073741821