我正在寻找有关Google Go语言的信息。在“A Tour of Go”中他们有这个代码:
const (
Big = 1<<100
Small = Big>>99
)
但<<
和>>
是什么意思?
答案 0 :(得分:23)
他们是bitwise shift operators。 x << y
表示 x ×2 y ,而x >> y
表示 x ×2 < sup> -y 或等效地,x÷2 y 。这些运算符通常用于操纵值的二进制表示,其中,就像十进制的10的幂,乘以或除以2的幂,分别具有“向左或向右”移位数字的效果: / p>
// 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中,右移为无符号值logical shift,有符号值为arithmetic shift。逻辑移位总是向零舍入,而算术移位总是向下舍入,即朝向-∞。
答案 1 :(得分:7)
Arithmetic operators
...
<< left shift integer << unsigned integer
>> right shift integer >> unsigned integer
以下一点:
移位运算符将左操作数移位右操作数指定的移位计数。如果左操作数是有符号整数,则它们实现算术移位;如果是无符号整数,则它们实现逻辑移位。班次计数没有上限。对于移位计数n,移位的行为就好像左操作数被移位n次1。结果,x <&lt;&lt; 1与x * 2和x>&gt;相同。 1与x / 2相同但截断为负无穷大。
答案 2 :(得分:4)
这些是向左移位和向右移位运算符。它们与C语言中的相同,也是它的衍生物。
x << y
是x次幂的x乘以2
x >> y
是x除以2的幂(丢弃的小数部分)
如果您将数字视为二进制,则乘以2的幂将位向左移位(101 * 2 ^ 3变为101000),方法与十进制相乘,乘以10的幂将数字移至左(12340 * 10 ^ 3变为12340000)。对于2的幂除法,反之亦然。它将二进制表示向右移动。由此得名。对于计算机来说,这是一个非常快速的操作,因此它在性能关键位等应用程序中使用了很多,例如加密技术。
答案 3 :(得分:3)
<<
和>>
为shift operators。
它们处理数字的基础二进制表示,并将运算符左侧或左侧的数字“移位”运算符右侧指定的位数:
1 << 1 == 2
2 << 1 == 4
111b << 3 == 111000b