当前位置:   article > 正文

go语言按位取反 | goland按位取反_golang 按位取反

golang 按位取反

很多编程语言使用 ~ 作为一元按位取反(NOT)操作符,Go 重用 ^ XOR 操作符来按位取反:

  1. // 错误的取反操作
  2. func main() {
  3. fmt.Println(~2) // bitwise complement operator is ^
  4. }
  5. // 正确示例
  6. func main() {
  7. var d uint8 = 2
  8. fmt.Printf("%08b\n", d) // 00000010
  9. fmt.Printf("%08b\n", ^d) // 11111101
  10. }

同时 ^ 也是按位异或(XOR)操作符。

一个操作符能重用两次,是因为一元的 NOT 操作 NOT 0x02,与二元的 XOR 操作 0x22 XOR 0xff 是一致的。

Go 也有特殊的操作符 AND NOT &^ 操作符,不同位才取1。

  1. func main() {
  2. var a uint8 = 0x82
  3. var b uint8 = 0x02
  4. fmt.Printf("%08b [A]\n", a)
  5. fmt.Printf("%08b [B]\n", b)
  6. fmt.Printf("%08b (NOT B)\n", ^b)
  7. fmt.Printf("%08b ^ %08b = %08b [B XOR 0xff]\n", b, 0xff, b^0xff)
  8. fmt.Printf("%08b ^ %08b = %08b [A XOR B]\n", a, b, a^b)
  9. fmt.Printf("%08b & %08b = %08b [A AND B]\n", a, b, a&b)
  10. fmt.Printf("%08b &^%08b = %08b [A 'AND NOT' B]\n", a, b, a&^b)
  11. fmt.Printf("%08b&(^%08b)= %08b [A AND (NOT B)]\n", a, b, a&(^b))
  12. }
  1. 10000010 [A]
  2. 00000010 [B]
  3. 11111101 (NOT B)
  4. 00000010 ^ 11111111 = 11111101 [B XOR 0xff]
  5. 10000010 ^ 00000010 = 10000000 [A XOR B]
  6. 10000010 & 00000010 = 00000010 [A AND B]
  7. 10000010 &^00000010 = 10000000 [A 'AND NOT' B]
  8. 10000010&(^00000010)= 10000000 [A AND (NOT B)]
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/790212
推荐阅读
相关标签
  

闽ICP备14008679号