以下の記事の続きです。
今回は、bit演算でn番目のbitを反転、0の場合は1に、1の場合は0にします。
簡略化のため、n番目は0から始まると考えます。
一番右側、つまり最下位の桁は0番目です。
排他的論理和 (XOR)
Python では、x ^ yで、x と y の排他的論理和を計算できます。
| XOR | 結果 |
|---|---|
| 0 ^ 0 | 0 |
| 0 ^ 1 | 1 |
| 1 ^ 0 | 1 |
| 1 ^ 1 | 0 |
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'
想定通りになりました。