它们是按位移位运算符。x << y表示x ×2 y,而x >> y表示x ×2 -y或等效地x÷2 y。这些运算符通常用于操作值的二进制表示形式,就像用十进制的10的幂一样,乘以2的乘方或除以分别将数字“左移”或“右移”:
// Left shift:
13 * 2 == 26 // decimal
1101 * 10 == 11010 // binary (13 is 8 + 4 + 0 + 1)
// Right shift (brackets denote discarded portion):
13 / 2 == 6[.5] // decimal
1101 / 10 == 110[.1] // binary
由于您是对整数进行运算,并且右移通常会产生分数值,因此有两种方法可以处理右舍入的结果如何取整。在Go中,右移是无符号值的逻辑移位,而有符号值的算术移位。逻辑移位总是四舍五入,而算术移位总是四舍五入,即-∞。