为什么 -2 & -1 在 Go 中等于 -2?

Boy*_*ema -1 binary go

为什么 -2&-1 会导致 -2?我假设 0010 和 0001 会导致 0000。当数字为正时确实如此。

fmt.Printf("%b, %b, %v\n", -2, -1, -2&-1)
// shows: -10, -1, -2
Run Code Online (Sandbox Code Playgroud)

https://play.golang.org/p/2G3vDwxAy2J

Eli*_*sky 6

这实际上是一个关于数字如何在计算机中表示的问题,而不是关于围棋。您会从其他语言/环境(如 C 或 Python)中获得相同的结果。

为简单起见,我们假设为 8 位。-2 是11111110二进制的(使用二进制补码,这是现代机器中表示负整数的标准方法)。-1 是11111111二进制的。其中AND11111110,即 -2。

实际上,Go 整数可能是 32 位或 64 位,但这不会改变答案。只需在上述表示的左侧添加一堆 1。结果仍然1111....1110是-2。