>>是什么用Go语言表示?

时间:2012-03-21 01:26:44

标签: programming-languages go bitwise-operators bit-shift

我正在寻找有关Google Go语言的信息。在“A Tour of Go”中他们有这个代码:

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

<<>>是什么意思?

您可以在http://tour.golang.org/#14

查看所有代码

4 个答案:

答案 0 :(得分:23)

他们是bitwise shift operatorsx << 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)

来自specification

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