为什么Go语言有一个“位清除(AND NOT)”运算符?

9

为什么Go语言有"位清除(AND NOT)"运算符&^

a &^ ba & ^b之间是否会有任何区别?

1个回答

15

使用显式位清除运算符处理字面量和未类型化常量时,有一个微妙的区别使得操作更加容易。

未类型化的整数默认类型为int,因此像 a := uint32(1) & ^1 这样的语句是不合法的,因为 ^1 会被先计算,并被解释为 ^int(1),结果为-2。 然而,这里的 a := uint32(1) &^ 1 是合法的,因为1在此处根据上下文被解释为uint32。

显式位清除也可能带来一些性能上的收益,但我并不太确定。


2
至少在amd64上,它们编译成相同的机器代码,因此在那里没有性能差异。 - JimB
JimB,我猜你的意思是如果你把所有东西都变成有符号整数? - James Antill

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接