Skip to content

在 Go 语言中,位运算符直接操作整数的二进制位。一共六个,按用途列出如下:

1. 位运算符列表 ​

  1. 按位与 (&)

    • 用途:对两个整数的每一位进行按位与运算。结果的每一位都是两个操作数对应位的按位与的结果。
    • 示例:
      go
      package main
      
      import "fmt"
      
      func main() {
          a := 12   // 二进制: 1100
          b := 7    // 二进制: 0111
          result := a & b
          fmt.Println("a & b:", result) // 输出: a & b: 4(二进制: 0100)
      }
  2. 按位或 (|)

    • 用途:对两个整数的每一位进行按位或运算。结果的每一位都是两个操作数对应位的按位或的结果。
    • 示例:
      go
      package main
      
      import "fmt"
      
      func main() {
          a := 12   // 二进制: 1100
          b := 7    // 二进制: 0111
          result := a | b
          fmt.Println("a | b:", result) // 输出: a | b: 15(二进制: 1111)
      }
  3. 按位异或 (^)

    • 用途:对两个整数的每一位进行按位异或运算。结果的每一位都是两个操作数对应位的按位异或的结果。
    • 示例:
      go
      package main
      
      import "fmt"
      
      func main() {
          a := 12   // 二进制: 1100
          b := 7    // 二进制: 0111
          result := a ^ b
          fmt.Println("a ^ b:", result) // 输出: a ^ b: 11(二进制: 1011)
      }
  4. 按位取反 (^,一元运算符)

    • 用途:对一个整数的每一位进行取反运算(即将每一位的 0 变成 1,将 1 变成 0)。
    • 示例:
      go
      package main
      
      import "fmt"
      
      func main() {
          a := 12   // 二进制: 1100
          result := ^a
          fmt.Println("^a:", result) // 输出: ^a: -13(按位取反后用补码表示)
      }
  5. 左移 (<<)

    • 用途:将一个整数的所有位向左移动指定的位数,右侧补零。
    • 示例:
      go
      package main
      
      import "fmt"
      
      func main() {
          a := 3    // 二进制: 0011
          result := a << 2
          fmt.Println("a << 2:", result) // 输出: a << 2: 12(二进制: 1100)
      }
  6. 右移 (>>)

    • 用途:将一个整数的所有位向右移动指定的位数。对于无符号整数,左侧补零;对于有符号整数,左侧补符号位(算术右移)。
    • 示例:
      go
      package main
      
      import "fmt"
      
      func main() {
          a := 12   // 二进制: 1100
          result := a >> 2
          fmt.Println("a >> 2:", result) // 输出: a >> 2: 3(二进制: 0011)
      }

2. 示例 ​

示例 1:组合使用位运算符

go
package main

import "fmt"

func main() {
    a := 15   // 二进制: 1111
    b := 9    // 二进制: 1001

    fmt.Println("a & b:", a & b)  // 输出: a & b: 9(二进制: 1001)
    fmt.Println("a | b:", a | b)  // 输出: a | b: 15(二进制: 1111)
    fmt.Println("a ^ b:", a ^ b)  // 输出: a ^ b: 6(二进制: 0110)
    fmt.Println("^a:", ^a)        // 输出: ^a: -16
    fmt.Println("a << 1:", a << 1) // 输出: a << 1: 30(二进制: 11110)
    fmt.Println("a >> 2:", a >> 2) // 输出: a >> 2: 3(二进制: 0011)
}

3. 总结 ​

  • 位运算符 用于整数的位级操作,主要包括:
    • 按位与 (&)
    • 按位或 (|)
    • 按位异或 (^)
    • 按位取反 (^,一元运算符)
    • 左移 (<<)
    • 右移 (>>)

记法上分两类:&、|、二元 ^ 逐位合并,<<、>> 移位等价于乘除 2 的幂。一元 ^ 取反后按补码解释,所以 ^12 是 -13。

参考资料 ​

同层页面 ​

相关页面 ​

Hello Golang