为什么 Go 使用 ^ 而不是 ~ 来表示一元按位非?

Why does Go use ^ rather than ~ for unary bitwise-not?

大多数编程语言使用 ~ 来表示一元按位非运算。相比之下,Go 使用 ^:

fmt.Println(^1)  // Prints -2

为什么 Go 的设计者决定打破常规?

因为 ^x 等同于 m ^ x,其中 m = "all bits set to 1" 表示无符号 x,m = -1 表示有符号 x。 Says so in the spec.

这类似于 -x 是 0 - x