为啥 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 &^ ba & ^b 之间有什么区别吗?

【问题讨论】:

【参考方案1】:

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

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

明确一点也可能会带来一些性能提升,但我不太确定。

【讨论】:

至少在 amd64 上它们编译成相同的机器码,所以那里没有性能差异。 JimB,我猜你的意思是如果你把所有东西都做为整数?

以上是关于为啥 Go 有一个“bit clear (AND NOT)”运算符?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Go 输入 nil?

go语言为啥没有继承?

为啥 Go 语言的性能还不如java

HTML:为啥Android浏览器在键盘上显示“Go”而不是“Next”?

驳狗屎文 "我为啥放弃Go语言

为啥 Go 有几种不同的整数类型?