猿问

运算符“ <<”和“ >>”做什么?

我正在http://tour.golang.org上进行“ GO之旅” 。表15包含一些我无法理解的代码。它使用以下语法定义两个常量:


const (

    Big = 1<<100

    Small = Big>>99

)

我还不清楚这是什么意思。我试图修改代码并以不同的值运行它,以记录更改,但是我不明白那里发生了什么。


然后,它在表24上再次使用该运算符。它使用以下语法定义变量:


MaxInt uint64 = 1<<64 - 1


当它打印变量时,它会打印:


uint64(18446744073709551615)


uint64类型在哪里。但我不知道18446744073709551615从哪里来。


慕森卡
浏览 235回答 3
3回答

MMMHUHU

他们是Go的按位移位运算符。这很好地解释了它们如何在C中工作(它们在几种语言中的工作方式相同)。基本上1<<64 - 1对应于2 ^ 64 -1,= 18446744073709551615。这样想吧。如果您从001(即10 ^ 0)开始,然后以1移至左侧,则以十进制表示,最后以010(即10 ^ 1)结束。如果再次移位,则以100结尾,即10 ^ 2。因此,向左移动等同于移动10倍。在二进制中是一样的东西,但是在基数2中,所以1 << 64意味着乘以2 64倍(即2 ^ 64)。
随时随地看视频慕课网APP

相关分类

Go
我要回答