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

我已经环顾四周了大约一个星期,似乎无法找到这两个运算符的体面解释,&^并且&^=,在 Go 语言中以及它们是如何使用的。有没有好心人教教我?


皈依舞
浏览 385回答 2
2回答

手掌心

当我们查看所有按位运算符时,这会更容易理解:&    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 mainimport "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)}运行上述代码生成的输出为:AND100 & 101 results in 100101 & 100 results in 100OR100 | 101 results in 101101 | 100 results in 101XOR100 ^ 101 results in 001101 ^ 100 results in 001AND NOT111 &^ 101 results in 010101 &^ 111 results in 000最后,&^=是一个速记赋值运算符。例如,x = x &^ y可以替换为x &^= y

开满天机

该规范说自己是位明确运营商:&^   bit clear (AND NOT)    integers您可以将它们用作位标志值的一部分。你会习惯or打开一点,然后and not关闭它。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go