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

标签 go operators token

我已经找了大约一个星期了,似乎找不到对这两个操作符&^&^= 的合适解释,在 Go 语言中以及如何使用它们。有人会好心地启发我吗?

最佳答案

当我们看一下所有的按位运算符时,这就更容易理解了:

&    bitwise AND
|    bitwise OR
^    bitwise XOR
&^   bit clear (AND NOT)
  1. 按位与(&):当两个操作数位都为1时,结果为1,否则结果为0。
  2. 按位或(|):当至少一个操作数位为 1 时,结果为 1,否则,如果两个操作数位都为 0,则结​​果为 0。
  3. 按位异或(^):1时结果为1,且只有一个操作数位为1,否则结果为0。这三个运算符(&, |, ^) 无论操作数位的顺序如何,都产生相同的结果。
  4. 按位与非(&^):当第一个操作数位为1,第二个操作数位为0时,结果为1;否则结果为 0。请注意,操作数位的顺序会影响结果。要使结果为 1,第一个操作数位必须为 1,第二个必须为 0。

这是代码,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

关于go - Go中&^和&^=运算符的用法和意义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27097461/

相关文章:

java - 使用正则表达式从 json 路径中提取多个标记

java - 用于 Java 的 JWT(JSON Web token )库

regex - Golang 正则表达式从 git url 中解析出 repo 名称

Go 语言/CGO : Problems calling Mach API host_statistics() from Go

java - & vs && -- 第一种情况如何使用?

sql - 使用连接将两个或多个表合并为一个表

powershell - 如何在 Azure DevOps 上的 Windows 管道中为 Go 生成 syso 文件

go - 优化 CPU 密集型 Golang WebApp 的方法

c# - 为什么这个表达式在 C# 和 C++ 中产生不同的结果?

c++ - GetTokenInformation 基础知识