以下の記事の続きです。
今回は、bit演算でn番目のbitを1にします。
簡略化のため、n番目は0から始まると考えます。
一番右側、つまり最下位の桁は0番目です。
論理和 (OR)演算
pythonでは、x | y
と書くことで、x と y のビット単位 論理和を得ることができます。
OR | 結果 |
---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
n番目のbitを1にする
1をnビット左シフトして、数字と|
することで、n番目のbitを1にすることができます。
# 0番目のbitを1にする。 b2 b1 b0 0 0 0 1 << 0 0 0 1 | -------- 0 0 1 # 1番目のbitを1にする。 0 0 0 1 << 1 0 1 0 | -------- 0 1 0 # 2番目のbitを1にする。 0 0 0 1 << 2 1 0 0 | -------- 1 0 0
例えば、6(10)つまり110(2)、5(10)つまり101(2)、3(10)つまり011(2)のそれぞれ0の桁のbitを1に変更するには、以下のような操作で行うことができます。
1 << 0 0 0 1 6 : 1 1 0 0 0 1 | ----- 1 1 1 1 << 1 0 1 0 5 : 1 0 1 0 1 0 | ----- 1 1 1 1 << 2 1 0 0 3 : 0 1 1 1 0 0 | ----- 1 1 1
関数にまとめる
ここまでの操作を関数にまとめて、インタラクティブモードで実行してみます。
>>> def set_nth_bit(num: int, n: int): ... return num | (1 << n) ... >>> bin(set_nth_bit(6, 0)) '0b111' >>> bin(set_nth_bit(5, 1)) '0b111' >>> bin(set_nth_bit(3, 2)) '0b111' >>>
想定通りの結果を得ることができました。
以下に続きます。