【问题标题】:What does a >> mean in Go language?Go 语言中的 >> 是什么意思?
【发布时间】:2012-03-21 01:26:44
【问题描述】:

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

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

但是&lt;&lt; 和&gt;&gt; 是什么意思?

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

【问题讨论】:

  • 这些是&lt;&lt; 左移和&gt;&gt; 右移运算符。
  • 我想像在(大多数?)类 C 语言中那样进行位移

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


【解决方案1】:

他们是bitwise shift operators。 x &lt;&lt; y 表示 x × 2y,而 x &gt;&gt; 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 中,右移是无符号值上的 logical shift 和有符号值上的 arithmetic shift。逻辑移位总是向零舍入,而算术移位总是向下舍入,即向-∞。

【讨论】:

    【解决方案2】:

    来自specification:

    Arithmetic operators
    
    ...
    
    <<   left shift             integer << unsigned integer
    >>   right shift            integer >> unsigned integer
    

    还有一点:

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

    【讨论】:

      【解决方案3】:

      这些是bit shift left和bit shift right运算符。它们与 C 语言及其衍生语言中的相同。

      x << y 
      

      是 x 乘以 2 的 y 次方

      x >> y
      

      是 x 除以 2 的 y 次方(舍弃小数部分)

      如果您将数字视为二进制,则乘以 2 的幂会将位向左移动(101 * 2^3 变为 101000),其方式与十进制乘以 10 的幂将数字移动到左(12340 * 10^3 变为 12340000)。对于除以 2 的幂,反之亦然。它将二进制表示向右移动。由此得名。顺便说一句,这对于计算机来说是一个非常快速的操作,因此它被大量用于性能关键的比特旋转应用程序,例如密码学。

      【讨论】:

        【解决方案4】:

        &lt;&lt; 和 &gt;&gt; 是 shift operators。

        它们处理数字的底层二进制表示,并将运算符左侧或右侧的数字“移动”运算符右侧指定的位数:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-08-27
          • 2011-01-14
          • 2011-05-05
          • 2020-10-30
          • 1970-01-01
          • 2020-08-07
          • 2016-12-03
          相关资源
          最近更新 更多