はじめに
今回はPythonの2,8,10,16進数の表記と変換方法を紹介します。
Pythonの導入や基本操作が行えることを前提で進めます。
↓前提知識はこちらをご覧ください↓
![](https://signyamo.blog/wp-content/uploads/2024/06/dc3ee87ef36f8aef46a0fe859f673171-6-320x180.jpg)
進数とは
進数とは、特定の数字の表し仕方です。
○○進数のように、どの数字まで “1文字” で数えれるようにするかで処理が変わります。
![](https://signyamo.blog/wp-content/uploads/2024/06/image-01-14.jpg)
なので「10」という数字の組み合わせで表される内容は、進数によって変わります。
私たちに馴染みが深い10進数で表すと… 下図のようになります。
![](https://signyamo.blog/wp-content/uploads/2024/06/image-02-13.jpg)
・2進数の「10」 → 10進数だと「2」
・8進数の「10」 → 10進数だと「8」
・16進数の「10」 → 10進数だと「16」
![](https://signyamo.blog/wp-content/uploads/2023/02/pd0ogJ64_400x400-150x150.jpg)
“1文字” で数えれるようにする下図の限界を迎えると…
数字が1つ繰り上がるという形になります。
・2進数 → 1文字で限界 → 2で繰り上がり
・8進数 → 8文字で限界 → 8で繰り上がり
・16進数 → 16文字で限界 → 16で繰り上がり
※「0」を1つの数とカウントする点に注意。
以上が、進数についての解説です。
Pythonで2,8,10,16進数を表現する
普通の数字は10進数として処理されます。
なので「2,8,16進数」を表す場合、特別な処理が必用です。
【進数を表す記号】
・bin() → 数字を2進数化
・oct() → 数字を8進数化
・hex() → 数字を16進数化
![](https://signyamo.blog/wp-content/uploads/2024/06/image-03-12.jpg)
![](https://signyamo.blog/wp-content/uploads/2023/02/pd0ogJ64_400x400-150x150.jpg)
・10を2進数化すると「1010」になります。
・10を8進数化すると「12」になります。
・10を10進数するのは、そのままで大丈夫です。
・10を16進数化すると「a」になります。
こちらは、下図のようなprint()処理で確認できます。
それぞれの進数は下記のように省略されて表示されます。
【進数を表す省略表記】
・0b → これ以降の数字が2進数であることを表す
・0o → これ以降の数字が8進数であることを表す
・0x → これ以降の数字が16進数であることを表す
なので、Print結果はこのような表記になります。
![](https://signyamo.blog/wp-content/uploads/2024/06/image-04-13.jpg)
また、この省略記号を使えば、bin() oct() hex()を使わなくても2,8,16進数を表記できます。
【進数の表し方】
・bin() → 0b
・oct() → 0o
・hex() → 0x
なので、bin(10)は0x10と表す事も可能です。
※後で紹介するprintの挙動が若干変わる点だけ注意。
![](https://signyamo.blog/wp-content/uploads/2023/02/pd0ogJ64_400x400-150x150.jpg)
0b = bin()の略
0o = oct()の略
0x = hex()の略と考えてください。
…
…なんで、16進数だけ0hじゃななくて0xなの問題。
以上が、Pythonで2,8,10,16進数を表現する方法です。
2,8,10,16進数をprintする
print()にbin(),oct(),hex()を使った場合… 何の問題も無く出力できます。
出力結果には「0b,0o,0x」が付きます。
![](https://signyamo.blog/wp-content/uploads/2024/06/image-04-13.jpg)
そして、次の挙動が問題です。
print()に0b,0o,0xを使って2,8,16進数を入れると10進数表記に変換されます。
![](https://signyamo.blog/wp-content/uploads/2024/06/image-05-12.jpg)
![](https://signyamo.blog/wp-content/uploads/2023/02/pd0ogJ64_400x400-150x150.jpg)
・2進数の10 → 10進数だと「2」になります。
・8進数の10 → 10進数だと「8」になります。
・16進数の10 → 10進数だと「16」になります。
なので、0b,0o,0x形式のデータを2,8,16進数で出力するには…
bin(0b), oct(0o), hex(0x)のような形にする必要があります。
![](https://signyamo.blog/wp-content/uploads/2024/06/image-06-12.jpg)
![](https://signyamo.blog/wp-content/uploads/2023/02/pd0ogJ64_400x400-150x150.jpg)
2,8,16進数の「10」をbin()、oct()、hex()に入れると…
そのまま2,8,16進数での「10」が出力されます。
・2進数の「10」 → 10進数だと「2」
・8進数の「10」 → 10進数だと「8」
・16進数の「10」 → 10進数だと「16」
なので、データの表示方法が変わりますが…
内容的にはすべて同じです。
以上が、2,8,10,16進数をprintする方法の解説です。
2,8,10,16進数を別の進数に変換する
bin(),oct(),hex()に別進数の「0b,0o,0x」を使うと数値の変換が可能です。
たとえばbin(0b),bin(0o),bin(),bin(0x)のようにすると…
すべての数字が2進数に変換されてprintされます。
![](https://signyamo.blog/wp-content/uploads/2024/06/image-07-14.jpg)
![](https://signyamo.blog/wp-content/uploads/2023/02/pd0ogJ64_400x400-150x150.jpg)
・8進数の「10」 → 10進数だと「8」
→ 2進数で表すと「1000」
・10進数の「10」
→ 2進数で表すと「1010」
・16進数の「10」 → 10進数だと「16」
→ 2進数で表すと「100000」
hex(0b),hex(0o),hex(),hex(0x)のようにすると…
すべての数字が16進数に変換されてprintされます。
![](https://signyamo.blog/wp-content/uploads/2024/06/image-08-16.jpg)
![](https://signyamo.blog/wp-content/uploads/2023/02/pd0ogJ64_400x400-150x150.jpg)
・2進数の「10」 → 10進数だと「2」
→ 16進数で表すと「2」
・8進数の「10」 → 10進数だと「8」
→ 16進数で表すと「8」
・10進数の「10」
→ 16進数で表すと「a」
あと、省略しましたが…
8進数のoct()も同じテクニックが使えます。
10進数への変換はint()で行えます。
![](https://signyamo.blog/wp-content/uploads/2024/06/image-09-12.jpg)
あとprint()の場合、intを使わなくても勝手に10進数に変換されてます。
![](https://signyamo.blog/wp-content/uploads/2024/06/image-10-11.jpg)
以上が、2,8,10,16進数を別の進数に変換する方法です。
まとめ
今回は、Pythonで2,8,10,16進数の表記と変換方法を紹介しました。
・進数とは特定の数字の表現方法
・進数が変わると “1文字” で数えれる数字が変わる
・pythonだと、bin(),oct(),hex()を使えば数字の進数を変換できる
・0b,0o,0xという形で進数を表現する事も可能
また、他にもpythonやプログラムについて解説してます。
![](https://signyamo.blog/wp-content/uploads/2024/06/dc3ee87ef36f8aef46a0fe859f673171-9-320x180.jpg)
![](https://signyamo.blog/wp-content/uploads/2024/06/dc3ee87ef36f8aef46a0fe859f673171-8-320x180.jpg)
![](https://signyamo.blog/wp-content/uploads/2024/07/776ec523006d9f71b64bb7d8af1e3386-320x180.jpg)
ぜひ、こちらもご覧ください。
コメント