我在 http://tour.golang.org 上关注“GO 之旅” . 表 15 有一些我无法理解的代码。它使用以下语法定义两个常量:
const (
Big = 1<<100
Small = Big>>99
)
我完全不清楚这意味着什么。我尝试修改代码并使用不同的值运行它以记录更改,但我无法理解那里发生了什么。
然后,它在表 24 上再次使用该运算符。它使用以下语法定义一个变量:
MaxInt uint64 = 1<<64 - 1
当它打印变量时,它会打印:
uint64(18446744073709551615)
在哪里uint64
是类型。但我不明白在哪里18446744073709551615
来自。
最佳答案
它们是 Go's bitwise shift operators .
Here很好地解释了它们如何为 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)。
关于operators - 运算符 '<<' 和 '>>' 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12425507/