为什么 Go 有一个 "bit clear (AND NOT)" 运算符?

Why does Go have a "bit clear (AND NOT)" operator?

为什么 Go 有 &^,"bit clear (AND NOT)" 运算符?

a &^ ba & ^b有区别吗?

使用显式位清除运算符可以更轻松地处理文字和无类型常量的细微差别。

无类型整数的默认类型为 int,因此像 a := uint32(1) & ^1 这样的东西是非法的,因为 ^1 首先被评估,它被评估为 ^int(1),它等于 -2。 a := uint32(1) &^ 1 是合法的,但是根据上下文,此处 1 被评估为 uint32。

明确一点也可能会带来一些性能提升,但我对此不太确定。