XOR の性質
ABC121-Dが競技中に解けなかったので、XORの性質について調べて追記していく。コードはpython。
基本
「^」で計算できる。
a = 1 b = 2 c = a^b # 3
整数をビットごとに考えて、aとbで0/1が異なる場合に1それ以外は0となる。
性質
1. 0とXORを取っても値は変わらない
a = 12 b = 0^a # 12
2. 自分自身とXORを取ると0となる
a = 12 b = a^a # 0
3. 左右を交換できる
a = 12 b = 5 a^b == b^a # True
4. 自身にプラス1した数とXORを取ると1になる
a = 12 b = a+1 c = a^b # 1
5. 数の集合の中でXORを取るときには桁ごとに考えていい
足し算のように繰り上がりしないので、桁ごとに答えを考えていくことができる。
6. a==a^b^b
2よりb^b
の部分は0で、1よりa^0
はaであることから導ける