为什么Go语言有"位清除(AND NOT)"运算符&^
?
a &^ b
和a & ^b
之间是否会有任何区别?
为什么Go语言有"位清除(AND NOT)"运算符&^
?
a &^ b
和a & ^b
之间是否会有任何区别?
使用显式位清除运算符处理字面量和未类型化常量时,有一个微妙的区别使得操作更加容易。
未类型化的整数默认类型为int,因此像 a := uint32(1) & ^1
这样的语句是不合法的,因为 ^1 会被先计算,并被解释为 ^int(1),结果为-2。 然而,这里的 a := uint32(1) &^ 1
是合法的,因为1在此处根据上下文被解释为uint32。
显式位清除也可能带来一些性能上的收益,但我并不太确定。