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

时间:2014-11-24 03:32:16

标签: go operators token

我现在已经四处寻找了一周,似乎无法用Go语言为这两个运营商&^&^=找到合适的解释。如何使用它们。有人会像开导我一样善良吗?

2 个答案:

答案 0 :(得分:11)

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

&    bitwise AND
|    bitwise OR
^    bitwise XOR
&^   bit clear (AND NOT)
  1. 按位AND(&):当两个操作数位都为1时结果为1,否则结果为0.
  2. 按位OR(|):当至少一个操作数位为1时,结果为1,如果两个操作数位均为0,则结果为0.
  3. 按位异或(^):当一个结果为1时,只有一个操作数位为1,否则结果为0.这三个运算符(&, |, ^)产生相同的结果,而不管操作数位的顺序。
  4. 按位与非(&^):当第一个操作数位为1,第二个操作数位为0时,结果为1;否则结果为0.请注意,操作数位的顺序会影响结果。如果结果为1,则第一个操作数位必须为1,第二个必须为0。
  5. 这里的代码also on the 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

答案 1 :(得分:1)

spec says他们是清楚的运营商:

&^   bit clear (AND NOT)    integers

您可以将它们用作位标志值的一部分。您可以使用or开启一点,and not将其关闭。