[Python] bit演算でn番目のbitを反転する

以下の記事の続きです。

以下の記事の続きです。 今回は、bit演算でn番目のbitを1にします。 簡略化のため、n番目は0から始まると考えます。 一番右側、つまり最下位の桁は0番目です。 論理和 (OR)演算 pythonでは、x | yと書くことで、x ...

今回は、bit演算でn番目のbitを反転、0の場合は1に、1の場合は0にします。

簡略化のため、n番目は0から始まると考えます。

一番右側、つまり最下位の桁は0番目です。

排他的論理和 (XOR)

Python では、x ^ yで、x と y の排他的論理和を計算できます。

XOR結果
0 ^ 00
0 ^ 11
1 ^ 01
1 ^ 10

n番目のbitを反転する

1をnビット左シフトして、対象の数字と^することで、n番目のbitを反転することができます。

# 1番目のbitを反転、つまり1にする。
         b2 b1 b0
          0  0  0
1 << 1    0  1  0  ^
          --------
          0  1  0

# 1番目のbitを反転、つまり0にする。
         b2 b1 b0
          0  1  0
1 << 1    0  1  0  ^
          --------
          0  0  0

関数にまとめる

これまでの操作を関数にまとめ、インタラクティブモードで実行してみます。

>>> def toggle_nth_bit(num: int, n: int):
...     return num ^ (1 << n)
...
>>> bin(7)
'0b111'
>>> y = toggle_nth_bit(7, 1)
>>> bin(y)
'0b101'
>>> y = toggle_nth_bit(y, 1)
>>> bin(y)
'0b111'

想定通りになりました。