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

use*_*783 4 operators go bitwise-operators

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

是否有过任何区别a &^ ba & ^b

jus*_*ius 8

使用显式位清除运算符可以更轻松地处理文字和无类型常量.

无类型整数的默认类型为int,因此类似于a := uint32(1) & ^1非法,因为^ 1首先被计算,它被评估为^ int(1),等于-2.a := uint32(1) &^ 1是合法的,因为这里1根据上下文被评估为uint32.

明确清楚地表达可能会有一些性能提升,但我对此并不太确定.

  • 至少在amd64上它们编译为相同的机器代码,所以那里没有性能差异. (2认同)