Go语言中的>>含义是什么?

Dot*_*Dot 13 programming-languages bit-shift go bitwise-operators

我正在寻找有关Google Go语言的信息.在"A Tour of Go"中他们有这样的代码:

const (
    Big = 1<<100
    Small = Big>>99
)
Run Code Online (Sandbox Code Playgroud)

但是做什么<<>> 意味着什么?

您可以在http://tour.golang.org/#14上查看所有代码

Jon*_*rdy 26

它们是按位移位运算符.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
Run Code Online (Sandbox Code Playgroud)

因为您对整数进行操作而右移通常会产生小数值,所以有几种方法可以处理右移的结果如何舍入.在Go中,右移是无符号值的逻辑移位和有符号值的算术移位.逻辑移位总是向零舍入,而算术移位总是向下舍入,即向-∞.


icy*_*com 7

规格:

Arithmetic operators

...

<<   left shift             integer << unsigned integer
>>   right shift            integer >> unsigned integer
Run Code Online (Sandbox Code Playgroud)

还有一点:

移位运算符将左操作数移位右操作数指定的移位计数.如果左操作数是有符号整数,则它们实现算术移位;如果是无符号整数,则它们实现逻辑移位.班次计数没有上限.对于移位计数n,移位的行为就好像左操作数被移位n次1.结果,x << 1与x*2相同,x >> 1与x/2相同,但截断为负无穷大.


And*_*zos 5

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

x << y 
Run Code Online (Sandbox Code Playgroud)

是x的2乘以y的幂

x >> y
Run Code Online (Sandbox Code Playgroud)

x被2除以y的幂(小数部分被舍弃)

如果将数字视为二进制,则乘以2的幂会将位左移(101 * 2 ^ 3变为101000),其方式与十进制乘以10的幂相同,即将数字左移(12340 * 10 ^ 3变成12340000)。相反,除以2的幂是正确的。它会将二进制表示形式向右移动。由此得名。顺便说一句,这是计算机执行的一种非常快速的操作,因此,它在诸如密码学之类的性能关键位旋转应用中被大量使用。