[Python] bit演算でn番目のbitを1にする

以下の記事の続きです。

以下の記事の続きです。 今回は、bit演算でn番目のbitを0にします。 簡略化のため、n番目は0から始まると考えます。 ビットの反転 演算子~ は、0と1を逆にする、つまりビットを反転する演算子です。 >>> ~0 -1 >>...

今回は、bit演算でn番目のbitを1にします。

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

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

論理和 (OR)演算

pythonでは、x | yと書くことで、x と y のビット単位 論理和を得ることができます。

OR結果
0 | 00
0 | 11
1 | 01
1 | 11

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'
>>>

想定通りの結果を得ることができました。

以下に続きます。

以下の記事の続きです。 今回は、bit演算でn番目のbitを反転、0の場合は1に、1の場合は0にします。 簡略化のため、n番目は0から始まると考えます。 一番右側、つまり最下位の桁は0番目です。 排他的論理和 (XOR) Pytho...