首页 > 解决方案 > 为什么 -2 和 -1 在 Go 中等于 -2?

问题描述

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

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

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

标签: gobinary

解决方案


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

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

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


推荐阅读