Categories: Python

【Python】2進数、8進数、16進数の生成方法とビット演算について

この記事では、Pythonで2進数や8進数、または16進数を生成する方法について解説します。

また、それらの位取り記数法を使ったビット演算と演算子を紹介します。

2進数、8進数、16進数の生成

2進数を表現するには、数値リテラルの先頭に0bを付けます。大文字(0B)でも可能です。

b = 0b001
print(b, type(b))

b = 0B011
print(b, type(b))

実行結果

1 <class 'int'>
3 <class 'int'>

8進数の場合は、0o、または0Oで表現します。

o = 0o001
print(o, type(o))

o = 0O011
print(o, type(o))

実行結果

1 <class 'int'>
9 <class 'int'>

16進数の場合は0xまたは0Xを付けます。

x = 0x001
print(x, type(x))

x = 0X011
print(x, type(x))

実行結果

1 <class 'int'>
17 <class 'int'>

n進数の出力

2進数をprint()関数で出力すると10進数に直されて出力されてしまいます。2進数表記のまま出力したい場合は、bin()関数を使います。

x = 0b100
print(bin(x))

x = 0B010
print(bin(x))

実行結果

0b100
0b10

8進数の場合はoct()関数、16進数の場合はhex()関数を使います。

x = 0o010
print(oct(x))

x = 0x010
print(hex(x))

実行結果

0o10
0x10

これらの関数の戻り値は文字列です。演算に使用するには数値に変換する必要があります。

n進数への変換

n進数の文字列を数値として扱いたい場合は、int(変換する値, 基数)で変換できます。

# 99の2進数の文字列を生成
b = bin(99)
print(b)

# 2進数に変換
print(int(b, 2))

実行結果

0b1100011
99

8進数の場合int(値, 8)、16進数の場合int(値, 16)と指定します。

通常の演算

生成された値はint型となります。なので通常の演算も可能です。

x = 0b100
y = 0B010

print(f'{x} + {y} = {x + y}')
print(f'{x} - {y} = {x - y}')
print(f'{x} * {y} = {x * y}')
print(f'{x} / {y} = {x / y}')

実行結果

4 + 2 = 6
4 - 2 = 2
4 * 2 = 8
4 / 2 = 2.0

ビット演算

それでは、ビット演算について見ていきましょう。
使用する演算子は以下のとおりです。

& 論理積
| 論理和
^ 排他的論理和
~ ビット反転
<< 左シフト
>> 右シフト

論理積: &演算子

&演算子を使うことで論理積を求めることができます。論理積とは、両方の桁が1のときのみ1となります。

a = 0b101
b = 0B011

print(f'結果: {a & b}')
print(f'bin: {bin(a & b)}')

実行結果

結果: 1
bin: 0b1

論理和: |演算子

|演算子を使うことで論理和を求めることができます。論理和とは、どちらかの桁が1ならば1となります。

a = 0b101
b = 0B011

print(f'結果: {a | b}')
print(f'bin: {bin(a | b)}')

実行結果

結果: 7
bin: 0b111

排他的論理和: ^演算子

^演算子を使うことで排他的論理和を求めることができます。排他的論理和とは、同じでない桁が1となります。

a = 0b101
b = 0B011

print(f'結果: {a ^ b}')
print(f'bin: {bin(a ^ b)}')

実行結果

結果: 6
bin: 0b110

ビット反転: ~演算子

~演算子を使うことで1を足したマイナスな値になる。

x = 0b101
print(~x, bin(~x))

y = 0B011
print(~y, bin(~y))

実行結果

-6 -0b110
-4 -0b100

ビットシフト: <<演算子, >>演算子

<<演算子を使うことでビットを左にずらし、>>演算子を使うことでビットを右にずらします。

x = 0b1010
print(x << 1, bin(x << 1)) 

x = 0b1010 
print(x >> 1, bin(x >> 1))

実行結果

20 0b10100
5 0b101

まとめ

この記事では、Pythonでビット演算する方法を解説しました。

ビット演算できなくてもあまり問題ありませんが、フラグや画像処理で使われたりします。また他の言語でも使われたりするので覚えていて損はありません。

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ

ゆうまる

独学でプログラミングを勉強しているおじさん。いろんな言語を勉強したが浅く広くなためあまり仕事につながらない。また忘れっぽいため自分のブログを備忘録としても使っている。産まれてこのかたずっとネコを飼ってる生粋のネコ派。最近お腹が出てきて筋トレに奮闘中!

View Comments

Recent Posts

【Dart】コンストラクタのデフォルト引数について

Dartのコンストラクタのデフォルト引数…

2週間 ago

【Unity】有料アセットを無料で手に入れる方法

この記事では、Unityの有料アセットを…

4か月 ago

【Python】任意の秒数だけ処理を一時停止する方法【sleep()関数】

この記事では、Pythonで任意の秒数だ…

1年 ago

【Python】Wordの文書の新規作成と読み書き

この記事では、Pythonを使ってWor…

1年 ago

【Python】メタクラスって結局なんなの?

この記事では、Pythonのメタクラスに…

1年 ago