進数の表記
16進数の表記
16進数をリテラルで表記する場合、Python3では以下のような形式になります。
・先頭に「0」を付ける
・その後に「x」を記述する
・続けて0から9まで、及びaからfまでの英字を書く
「x」を含め、英字は大文字・小文字どちらでも構いません。
16進数の数値リテラルをキーボードから打ち込むと、10進数に変換した数値を表示します。
Pythonでは、16進数リテラルを数値型として扱います。
16進数のリテラルを10進数に自動的に変換します。
【16進数のリテラルを入力した例】 0x1ff → 511
数値から16進数相当の文字列を得るには、hex()という組み込み関数を使います。
引数に数値を与えると、16進数相当の文字列を返します。
「hex」とは、英語で16新数表示を意味する「hexadecimal」を略したものです。
【10進数の数値を16進数相当の文字列に変換した例】 hex(1023) → ’ox3ff’
16m進数の数値リテラルではなく、16進数相当の文字列を数値に変換するためには、組み込み関数のint()を使います。
ただし、第2引数に基数として「16」を渡します。
【16進数相当の文字列を数値に変換した例】int(“ox100”, 16) → 256
2進数の表記
2進数をリテラルで表記する場合、Python3では以下の様な形式を使います。
・先頭に「0」を付ける
・その後に「b」を記述する
・0または1の数値を続ける
16進数のリテラル表記と同様に、2進数のリテラルも10進数に変換します。
【2進数のリテラルを入力した例】 0b1000 → 8
10進数の数値を2進数相当の文字列に変換するためには、組み込み関数のbin()を使います。
関数名の「bin」とは、英語で2進数表記を意味する「binary」を略したものです。
【10進数の数値を2進数相当の文字列に変換した例】 bin(1023) → ‘0b1111111111’
2進数相当の文字列を整数に変換するためには、組み込み関数int()の第2引数に「2」という基数を渡して呼び出します。
※16進数の時と同じ
【2進数相当の文字列を数値に変換した例】 int(“0b1111111111”, 2) → 1023
8進数の表記
8進数をリテラルで表記する場合、Python3では以下のような形式を使います。
・先頭に「0」を付ける
・その後に「o」を記述する
・0から7までの数値を続ける
Python2までは、「0123」のように0から始まる数値を使って8進数のリテラル表記としていました。
それだと「0123」は8進数、「123」は10進数となって紛らわしく、また、16進数や2進数と表記の仕方が異なっていたのですが
Python3になって、表記が統一されました。
【8進数のリテラルを入力した例】 0o1777 → 1023
数値を8進数相当の文字列に変換するためには、組み込み関数のoct()を使います。
関数名の「oct」とは、英語で8進数表記を意味する「octal」を略したものです。
【10進数の数値を8進数の文字列相当の文字列に変換した例】 oct(1023) → ’0o1777’
8進数相当の文字列を整数に変換するためには、組み込み関数のint()の第2引数に「8」という基数を渡して呼び出します。
※16進数、2進数の時と同じ
【8進数相当の文字列を数値に変換した例】 int(“0o1777”, 8) → 1023
ビット演算子
ビット演算子とは、2進数を個々の「ビット列」(1と0で構成された列)と見立てて実行する論理演算のことです。
演算というと、足し算や掛け算を思い浮かべまずが、ビット演算は、「+」や「*」といった算術演算よりも、論理演算に似た操作です。
論理演算とは、「==」などを使った比較演算を「and」や「or」で組み合わせる演算のことです。
ビット演算はGUIライブラリのようなものを使ってプログラミングを作るときなど、C言語で書かれたライブラリを利用するのに
用いることがあります。Pythonの標準ライブラリの中には、正規表現のモジュール(re)のように、引数として渡すフラグを
組む立てるときに、ビット演算子を利用するものがあります。
Pythonでは、特別な演算子を使って、整数を対象にビット演算を行うことができます。
0と1で構成される文字列を使ってビット演算をしたい場合は、組み込み関数のint()を使って文字列を整数に変換してから行えばいいでしょう。
【Pythonで利用できるビット演算子】
ビット演算子 | 説明 |
---|---|
x l y | xとyの論理和(OR)をとる |
x & y | xとyの倫理積(AND)をとる |
x ^ y | xとyの排他的論理和(XOR)をとる |
x << y , x >> y | シフト演算子。「<<」はxをyビット左にシフト、「>>」はxをyビット右にシフト |