为了账号安全,请及时绑定邮箱和手机立即绑定

Go中&^和&^=运算符的用法和意义

Go中&^和&^=运算符的用法和意义

Go
皈依舞 2021-08-30 21:56:16
我已经环顾四周了大约一个星期,似乎无法找到这两个运算符的体面解释,&^并且&^=,在 Go 语言中以及它们是如何使用的。有没有好心人教教我?
查看完整描述

2 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

当我们查看所有按位运算符时,这会更容易理解:


&    bitwise AND

|    bitwise OR

^    bitwise XOR

&^   bit clear (AND NOT)

按位与 ( &):当两个操作数位都为 1 时结果为 1,否则结果为 0。

按位或 ( |):当至少一个操作数位为 1 时结果为 1,否则如果两个操作数位均为 0,则结果为 0。

按位异或 ( ^): 1 时结果为 1,只有一个操作数位为 1,否则结果为 0。这三个运算符 ( &, |, ^) 产生相同的结果,无论操作数位的顺序如何。

按位与非( &^):当第一个操作数位为1,第二个操作数位为0时结果为1;否则结果为 0。请注意,操作数位的顺序会影响结果。要使结果为 1,第一个操作数位必须为 1,第二个必须为 0。

这里的代码也在 Go Playground 上,它演示了按位运算符的行为:


package main


import "fmt"


func main() {

    fmt.Println(`AND`)

    fmt.Printf("%b & %b results in %03b\n", 4, 5, 4&5)

    fmt.Printf("%b & %b results in %03b\n", 5, 4, 5&4)

    fmt.Println(`OR`)

    fmt.Printf("%b | %b results in %03b\n", 4, 5, 4|5)

    fmt.Printf("%b | %b results in %03b\n", 5, 4, 5|4)

    fmt.Println(`XOR`)

    fmt.Printf("%b ^ %b results in %03b\n", 4, 5, 4^5)

    fmt.Printf("%b ^ %b results in %03b\n", 5, 4, 5^4)

    fmt.Println(`AND NOT`)

    fmt.Printf("%b &^ %b results in %03b\n", 7, 5, 7&^5)

    fmt.Printf("%b &^ %b results in %03b\n", 5, 7, 5&^7)

}

运行上述代码生成的输出为:


AND

100 & 101 results in 100

101 & 100 results in 100

OR

100 | 101 results in 101

101 | 100 results in 101

XOR

100 ^ 101 results in 001

101 ^ 100 results in 001

AND NOT

111 &^ 101 results in 010

101 &^ 111 results in 000

最后,&^=是一个速记赋值运算符。例如,x = x &^ y可以替换为x &^= y


查看完整回答
反对 回复 2021-08-30
?
开满天机

TA贡献1786条经验 获得超13个赞

规范说自己是位明确运营商:

&^   bit clear (AND NOT)    integers

您可以将它们用作位标志值的一部分。你会习惯or打开一点,然后and not关闭它。


查看完整回答
反对 回复 2021-08-30
  • 2 回答
  • 0 关注
  • 381 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信