Go的位操作(&, |, ^, &^) 之我裂開了!

賭賭賭賭賭賭賭聖!發表於2020-12-17

Go的位操作(&,  |,  ^,  &^) 之我裂開了!

昨晚看GO的講解視訊,講到位操作,故事發生了。。。
視訊中可以看到 a &^ b = 0100 ,但我始終不明白結果怎麼得來的
於是,開始各種搜尋 &^ 是啥,&^ 怎麼算。。。
但是,按照我搜尋理解的,自己解出來答案是 1000, 我開始裂開了
於是,我斷言肯定是我做錯了,肯定是哪理解的不對,於是我繼續搜搜搜搜搜搜搜解答
無奈,我放棄了,我算的還是 1000 ,我裂的更大了
還好,我開始對視訊產生了疑惑,仔細觀察視訊
發現, 視訊裡面雖然寫的是 0100, 但是下面答案是 8, 8 的二進位制是 1000
唉, 我裂的更大了
最後,得到一個結論:
以後切不可盲目迷信自己相信的,一定要本地coding驗證!

最後講下位操作:

  • x ^ y [ 異或 ]

    • 10 ^ 2 == 8 // 1010 ^ 0010 = 1000
    • 操作的結果是如果某位不同則該位為1, 否則該位為0
  • x | y [ 或 ]

    • 10 | 2 == 10 // 1010 | 0010 = 1010
    • 兩個相應的二進位中只要有一個為1, 該位的結果值為1
  • x & y [ 與 ]

    • 10 & 2 == 2 // 1010 & 0010 = 0010
    • 兩個相應的二進位都為1, 該位的結果值才為1,否則為0
  • x &^ y [ 位清空 ]

    • 12 &^ 2 == 12 // 1100 &^ 0010 -> 1100 -> 1100
    • 20 &^ 4 == 16 // 10100 &^ 00100 -> 10100 -> 10000
    • b 轉為二進位制時,結果首先與a相同,然後如果b值為1 則對應結果的位置值為0
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章