我正在寻找有关Google的Go语言的信息。“Go之旅”中有这段代码:
const (
Big = 1<<100
Small = Big>>99
)
但是 <<
和 >>
是什么意思?
你可以在http://tour.golang.org/#14中查看所有的代码。
我正在寻找有关Google的Go语言的信息。“Go之旅”中有这段代码:
const (
Big = 1<<100
Small = Big>>99
)
但是 <<
和 >>
是什么意思?
你可以在http://tour.golang.org/#14中查看所有的代码。
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中,无符号值进行逻辑移位,有符号值进行算术移位。逻辑移位始终向零舍入,而算术移位始终向下舍入,即向-∞。
从规范中得知:
Arithmetic operators
...
<< left shift integer << unsigned integer
>> right shift integer >> unsigned integer
以下是内容翻译:
移位运算符将左操作数按右操作数指定的移位次数向左移动。如果左操作数是有符号整数,则它们实现算术移位,如果是无符号整数,则实现逻辑移位。移位计数没有上限。移位的行为就像左操作数按1进行n次移位。因此,x << 1与x*2相同,x >> 1与x/2相同,但向负无穷截断。
这些是位左移和位右移运算符。它们与C语言及其派生语言中的运算符相同。
x << y
x乘以2的y次方
x >> y
将x除以2的y次幂(小数部分舍去)
如果您将数字视为二进制,则乘以2的幂将位向左移动(101 * 2 ^ 3变为101000),与十进制中乘以10的幂将数字向左移动(12340 * 10 ^ 3变为12340000)的方式相同。相反,对于除以2的幂,它会将二进制表示向右移动。因此得名。顺便说一下,这对于计算机来说是一种非常快速的操作,因此在性能关键的位操作应用程序(例如加密)中经常使用。
<<
和 >>
是移位运算符。
它们作用于数字的二进制表示,通过右侧指定的位数向左或向右“移动”操作符左侧的数字:
1 << 1 == 2
2 << 1 == 4
111b << 3 == 111000b
<<
左移和>>
右移运算符。 - Dan D.