什么是golang中的^ 0?

sam*_*mol 10 go bitwise-operators twos-complement

我在代码库中看到^ 0.

例:

type stat struct {
  ...
  min int64
  ...
}

newStat := stat{min: ^0}
Run Code Online (Sandbox Code Playgroud)

^ 0是什么意思?

Mur*_*los 22

根据文件:

^ x按位补码是m ^ x,其中m ="所有位设置为1"

对于带符号x,无符号x和m = -1

这意味着它^0~0其他主流语言相同.

二进制补码(大多数编程语言采用)上,零补码的值为-1(在有符号数据类型上).所以这是一种写作方式:

newStat := stat{min: -1}
Run Code Online (Sandbox Code Playgroud)

  • 按位补码从数据类型中取出每个位并将其反转.例如,4位二进制中的0为0000,其按位补码为1111.与4位二进制中的10为1010且其补码为0101的方式相同. (3认同)
  • 我的猜测:他们没有像你通常想到的那样使用'min'(计算事物),他们将它用作一组位.如果最后一位是1则意味着什么,如果倒数第二位是1,则意味着其他一些事情,等等.在Go中,这种风格的代码可能使用'1 << iota'作为常量.无论如何'^ 0'可以说比"-1"更好地传达"所有位都设置为1的整数". (3认同)