3 回答
TA贡献1812条经验 获得超5个赞
它们是按位移位运算符。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中,右移是无符号值的逻辑移位,而有符号值的算术移位。逻辑移位总是四舍五入,而算术移位总是四舍五入,即-∞。
TA贡献1827条经验 获得超4个赞
从规格:
Arithmetic operators
...
<< left shift integer << unsigned integer
>> right shift integer >> unsigned integer
以及以下:
移位运算符将左操作数移位由右操作数指定的移位计数。如果左操作数是有符号整数,则执行算术移位;如果左操作数是无符号整数,则执行逻辑移位。班次计数没有上限。移位的行为就好像左操作数被n移位了n次,移位次数为n。结果,x << 1与x * 2相同,x >> 1与x / 2相同,但被截断为负无穷大。
TA贡献1794条经验 获得超8个赞
这是位左移和位右移运算符。它们与C语言及其衍生语言相同。
x << y
是x的2乘以y的幂
x >> y
x被2除以y的幂(小数部分被舍弃)
如果将数字视为二进制,则乘以2的幂会将位左移(101 * 2 ^ 3变为101000),其方式与十进制乘以10的幂相同,即将数字左移(12340 * 10 ^ 3变成12340000)。相反,除以2的幂是正确的。它会将二进制表示形式向右移动。由此得名。顺便说一句,这对于计算机而言是一种极其快速的操作,因此,它在诸如密码学之类的性能至关重要的比特旋转应用中被大量使用。
- 3 回答
- 0 关注
- 767 浏览
添加回答
举报