operators - 运算符 '<<' 和 '>>' 有什么作用?

标签 operators go

我在 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/

相关文章:

r - R 中的双冒号 (::) 是什么?

python ==语法错误

list - List::: 运算符和++的区别

string - 没有时间生成随机字符串?

go - 使用 Go Reflect 调用函数

javascript - 运算符 === 和 ||

java - 当 >= 运行时,Java 是否隐式检查 > 和 ==?

go - 在 Go 中计算 hashCode

go - sync.WaitGroup.Done()实际如何工作?

authentication - Web应用登录系统