在Go语言中,>>符号代表位右移操作。

16

我正在寻找有关Google的Go语言的信息。“Go之旅”中有这段代码:

const (
    Big = 1<<100
    Small = Big>>99
)

但是 <<>> 是什么意思?

你可以在http://tour.golang.org/#14中查看所有的代码。


1
这些是 << 左移和 >> 右移运算符。 - Dan D.
我认为位移操作应该像大多数类C语言一样进行。 - James Manning
4个回答

36
它们是位移运算符x << y 表示 x × 2y,而 x >> y 表示 x × 2−y 或者等价地,x ÷ 2y。这些运算符通常用于操作值的二进制表示,其中,就像十进制中的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中,无符号值进行逻辑移位,有符号值进行算术移位。逻辑移位始终向零舍入,而算术移位始终向下舍入,即向-∞。


7

规范中得知:

Arithmetic operators

...

<<   left shift             integer << unsigned integer
>>   right shift            integer >> unsigned integer

以下是内容翻译:

移位运算符将左操作数按右操作数指定的移位次数向左移动。如果左操作数是有符号整数,则它们实现算术移位,如果是无符号整数,则实现逻辑移位。移位计数没有上限。移位的行为就像左操作数按1进行n次移位。因此,x << 1与x*2相同,x >> 1与x/2相同,但向负无穷截断。


6

这些是位左移位右移运算符。它们与C语言及其派生语言中的运算符相同。

x << y 

x乘以2的y次方

x >> y

将x除以2的y次幂(小数部分舍去)

如果您将数字视为二进制,则乘以2的幂将位向左移动(101 * 2 ^ 3变为101000),与十进制中乘以10的幂将数字向左移动(12340 * 10 ^ 3变为12340000)的方式相同。相反,对于除以2的幂,它会将二进制表示向右移动。因此得名。顺便说一下,这对于计算机来说是一种非常快速的操作,因此在性能关键的位操作应用程序(例如加密)中经常使用。


4

<<>>移位运算符

它们作用于数字的二进制表示,通过右侧指定的位数向左或向右“移动”操作符左侧的数字:

1 << 1 == 2
2 << 1 == 4
111b << 3 == 111000b

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接