Select Language

AI Technology Community

2.6、Pythonバイナリ、8進、16進数字の表示と変換

一般的な10進数表記法のほかに、Pythonは2進数、8進数、16進数の表記法もサポートしています。これらは単に表記方法が異なるだけで、表す意味は同じです。たとえば、2進数の11は10進数の3と同じです。

1. Pythonの2進数表記法

10進数の100を2進数で表すと1100100になります。したがって、100は0b1100100で表すことができます。

>>> a = 0b1100100  # 2進数1100100
>>> a              # その値を確認すると、デフォルトで10進数で表示されます
100                # 10進数では100に相当します


0Bを使っても2進数を表すことができ、0bと同じ効果があります。たとえば、10進数の100は0B1100100でも表すことができます。

>>> a = 0B1100100
>>> a
100


次に、ある数値が与えられたとき、その2進数表記を知るにはどうすればよいでしょうか?Pythonにはbin()関数が用意されています。この関数は整数を入力とし、2進数で表された文字列を出力します。たとえば、bin(100)は文字列 '0b1100100' を出力します。

>>> a = bin(100)  # 10進数100の2進数表記を取得する
>>> a             # 2進数表記の値を確認する
'0b1100100'
>>> type(a)       # 返される値は文字列であることに注意
<type 'str'>
>>> b = bin(3)    # 10進数3の2進数表記を取得する
>>> b
'0b11'


2進数を表す文字列が与えられた場合、それを整数オブジェクトに変換するにはどうすればよいでしょうか?eval()関数を使うことができます。eval()関数は文字列を入力とし、整数オブジェクトを返します。

>>> a = eval('0b1100100')  # 入力は文字列
>>> type(a)                # 返される値の型は整数型
<type 'int'>
>>> a                      # 返される値の内容
100


もう1つ使える関数はint()です。これは実際には整数型のコンストラクタです。このコンストラクタは文字列オブジェクトから整数オブジェクトを構築することができ、構築時に基数を指定することができます。eval()関数とは異なり、文字列は0bで始めることはできず、基数を指定する必要があります。

再び100を例にとると、入力は文字列 '1100100' であり、'0b1100100' ではありません。そして、基数パラメータ2を指定するので、int('1100100', 2) で2進数1100100の値を持つ整数オブジェクトを構築することができます。

>>> a = int("1100100", 2)  # 文字列 "1100100" を2進数として解析する
>>> type(a)                # 返される値の型は整数型
<type 'int'>
>>> a                      # 返される値の内容は100
100


int()関数の第2引数に0を指定すると、第1引数に0bを付けることができます。int()関数は第2引数が0であることを見ると、第1引数の0bから入力文字列が2進数で解析されるべきであることを推測します。

>>> a = int("0b1101", 0)  # 第2引数が0で、第1引数に0bがあるので、2進数として解析されます
>>> type(a)               # 返される値の型は整数型
<type 'int'>
>>> a                     # 返される値は10進数の13
13

2. Pythonの8進数表記法

2進数表記法と同様に、数字の前に0を付けると、それが8進数であることを表します。

>>> a = 012    # 8進数12は、10進数の10に相当します
>>> type(a)
<type 'int'>
>>> a          # aの値を確認すると、デフォルトで10進数で表示されます
10


同様の問題として、整数を8進数の文字列に変換するにはどうすればよいでしょうか?システムにはoct()関数が用意されています。この関数は整数オブジェクトを入力とし、0で始まる文字列を出力します。たとえば、oct(10)は '012' を出力します。

>>> out_str = oct(10)   # 8進数形式で文字列型に変換する
>>> type(out_str)       # 返される値の型は文字列型
<type 'str'>
>>> out_str             # 返される値の内容を確認する
'012'
>>> out_str = oct(100)  # 100を8進数に変換する
>>> out_str             # 変換結果を確認する
'0144'


8進数で表された文字列を整数オブジェクトに構築するにはどうすればよいでしょうか?前述のeval()関数とint()関数の方法は依然として有効です。eval()関数を使用する場合は、入力文字列が0で始まる必要があります。これにより、eval()関数は入力された数が8進数で表されていることを認識します。

>>> a = eval('012')   # 8進数形式で表された文字列を整数に変換する
>>> type(a)           # 返される値の型を確認する
<type 'int'>
>>> a                 # 返される値の内容を確認する
10
>>> a = eval('0144')  # 8進数文字列144を整数に変換する
>>> a                 # 返される値の内容を確認する
100


int()関数を使用して文字列を整数に変換する場合は、第2引数を8に設定する必要があります。これは、文字列を8進数として解釈することを示します。入力文字列は0で始める必要はありません。ただし、0で始めても問題ありません。なぜなら、0は無視されるからです。たとえば、02と2は同じ意味を表します。

>>> a = int('144', 8)   # 8進数144、0で始まっていない
>>> type(a)             # 出力の型は整数型
<type 'int'>
>>> a                   # aの値を確認すると、10進数で100になります
100
>>> a = int('0144', 8)  # 0144は144と同等
>>> a                   # ただし、0b11は11とは同等ではない
100
>>> a = int('12', 8)    # 8進数12
>>> a
10


2進数表記法と同様に、第2引数が0で、第1引数が0で始まる場合、int()関数は入力された第2引数を8進数として解析しようとします。たとえば:

>>> a = int("0144", 0)  # 第2引数が0なので、第1引数から基数を推測する
>>> type(a)             # 第1引数が0で始まるので、8進数表記と考えられる
<type 'int'>            # 返される値の型は整数型
>>> a                   # 返される値は100、つまり8進数の144は10進数の100に相当する
100

3. Pythonの16進数表記法

16進数表記法では、数字の前に0xまたは0Xを付けて表します。数字0、1、…、9の10文字に加えて、a、b、c、d、e、fの6文字が導入され、それぞれ10、11、12、13、14、15を表します。たとえば、10進数の15を16進数で表すと0xFまたは0Xfになります。

なお、a、b、c、d、e、fはA、B、C、D、E、Fでも表すことができます。

>>> a = 0xf   # 0xで始まるのは16進数を表します
>>> a
15
>>> a = 0XF   # 0Xで始まるのは16進数を表します
>>> a
15
>>> a = 0Xf
>>> a
15


整数を16進数の文字列に変換したい場合は、hex()関数を使用できます。この関数は整数オブジェクトを入力とし、文字列を出力します。出力される文字列は、入力さ

post
  • 26

    item of content
Pythonの基本データ型は全部で26章あります。
この章では、整数型、浮動小数点数、文字列、ブール型、リスト、タプル、セットおよび辞書など、Pythonが提供する基本的なデータ型について紹介します。また、これらのデータ型に対する演算操作についても解説します。
私たちはPythonが強タイプ言語であることを知っています。つまり、各変数の型は特定の時点でのみ確定します。言い換えれば、Pythonにおける任意の生存しているオブジェクトの型は一意です。異なる型のオブジェクトには異なる属性があり、異なる操作を実行できます。
さらに、この章の最後では変数やオブジェクトなどの概念についても触れられます。それぞれのオブジェクトには確定した型があり、各変数は特定のオブジェクトを指し示します。