以下の記事の続きです。
今回は、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'
想定通りになりました。