为什么Go有&^
,“位清除(AND NOT)”运算符?
a &^ b
和a & ^b
之间是否存在差异?
答案 0 :(得分:7)
使用显式位清除运算符可以更轻松地处理文字和无类型常量。
无类型整数的默认类型为int,因此像a := uint32(1) & ^1
这样的东西是非法的,因为^ 1首先被评估,并且它被评估为^ int(1),等于-2。 a := uint32(1) &^ 1
是合法的,因为这里1根据上下文被评估为uint32。
明确清楚地表达可能会有一些性能提升,但我对此并不太确定。