我在http://tour.golang.org上关注"GO之旅" .表15有一些我无法理解的代码.它使用以下语法定义两个常量:
const (
Big = 1<<100
Small = Big>>99
)
Run Code Online (Sandbox Code Playgroud)
它根本不清楚我的含义.我试图修改代码并使用不同的值运行它来记录更改,但我无法理解那里发生了什么.
然后,它在表24上再次使用该运算符.它使用以下语法定义变量:
MaxInt uint64 = 1<<64 - 1
当它打印变量时,它会打印:
uint64(18446744073709551615)
uint64类型在哪里.但我无法理解18446744073709551615从哪里来.
Pao*_*lla 11
他们是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).
这与C系列的所有语言都是一样的:有点转变.
请参见http://en.wikipedia.org/wiki/Bitwise_operation#Bit_shifts
此操作通常用于将无符号整数乘以或除以2的幂:
b := a >> 1 // divides by 2
Run Code Online (Sandbox Code Playgroud)
1<<100很简单2^100(那很大).
1<<64-1是2⁶⁴-1,这是你可以用64位表示的最大整数(顺便说一下你不能表示1<<64为64位int,表15的要点是证明你可以在Go 中用数字常量表示它).