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



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

a &^ ba & ^b之间有什么区别吗?

有一个微妙的区别,使得使用显式位清除运算符更容易处理文字和非类型常量。

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

明确一点也可能有一些性能提升,但我不太确定。

最新更新