为啥 Go 有一个“bit clear (AND NOT)”运算符?
Posted
技术标签:
【中文标题】为啥 Go 有一个“bit clear (AND NOT)”运算符?【英文标题】:Why does Go have a "bit clear (AND NOT)" operator?为什么 Go 有一个“bit clear (AND NOT)”运算符? 【发布时间】:2017-10-02 14:12:42 【问题描述】:为什么 Go 有 &^
,“位清除 (AND NOT)”运算符?
a &^ b
和 a & ^b
之间有什么区别吗?
【问题讨论】:
【参考方案1】:使用显式位清除运算符可以更轻松地处理文字和无类型常量。
无类型整数的默认类型为 int,因此像 a := uint32(1) & ^1
这样的东西是非法的,因为首先计算 ^1,然后计算为 ^int(1),它等于 -2。 a := uint32(1) &^ 1
是合法的,但这里的 1 根据上下文被评估为 uint32。
明确一点也可能会带来一些性能提升,但我不太确定。
【讨论】:
至少在 amd64 上它们编译成相同的机器码,所以那里没有性能差异。 JimB,我猜你的意思是如果你把所有东西都做为整数?以上是关于为啥 Go 有一个“bit clear (AND NOT)”运算符?的主要内容,如果未能解决你的问题,请参考以下文章