組み込み開発を、実機で体系的に学びませんか?
クミタテでは、ESP32・電子回路・IoT開発を学べる オンライン教材を公開しています。無料会員向け教材も利用できます。
無料会員登録して教材を見る Googleアカウントなら簡単に登録できます
この記事では、組み込み開発でとても重要な 2進数と16進数 について解説します。
組み込み開発では、アドレスを意識した設計 を行うため、データを16進数で表現する場面が非常に多くあります。
例えば、
など、ハードウェア寄りの処理では ビット単位の操作 が必要になるため、16進数が非常に便利です。
「10進数じゃダメなの?」と思うかもしれませんが、 ビット操作と相性が良いのが16進数 なんですね。
まずは2進数の基本から。
10進数は 0〜9 で桁が繰り上がりますが、 2進数は 0 と 1 の2種類 しかないため、2つ増えるごとに桁が繰り上がります。
例:
| 10進数 | 2進数 |
|---|---|
| 0 | 0 |
| 1 | 1 |
| 2 | 10 |
| 3 | 11 |
| 4 | 100 |
2進数の各桁に 2のべき乗 を掛けて足し合わせます。
例: 2進数 101
合計:5
このように、4桁の2進数(0000〜1111)で 0〜15(16種類) を表現できます。
組み込みではよく出てくる単位です。
例: 1バイト = 10101010(8桁の2進数)
16進数は、0〜15 を1桁で表現できる数の表現方法です。
| 10進数 | 16進数 |
|---|---|
| 10 | A |
| 11 | B |
| 12 | C |
| 13 | D |
| 14 | E |
| 15 | F |
プログラムでは 0x を付けて表現します。
例: 0x1A、0xFF
16進数1桁は、2進数4桁に対応します。
| 16進数 | 2進数 |
|---|---|
| 0 | 0000 |
| 1 | 0001 |
| 9 | 1001 |
| A | 1010 |
| B | 1011 |
| F | 1111 |
つまり、
という関係になります。
1バイト(8ビット)は、
例: 0x31 → 2進数では 00110001
このように、1バイトの内容を 2桁の16進数 で簡潔に表現できます。
組み込み開発では、マイコン内部の設定を行う際に レジスタ を操作します。
レジスタは、
という特徴があります。
例: ADC の設定レジスタ(4〜6ビット目でリファレンス電圧を選択…など)
このとき、
00011000 と書くより0x18 と書いた方が分かりやすいというメリットがあります。
また、組み込みエンジニアは
など、16進数と2進数の対応を自然に覚えているため、 16進数の方が頭の中で処理しやすい のです。
2進数・16進数は、基本情報技術者試験などの資格でも頻出です。
私のホームページでも、 2進数・16進数の変換ツール を公開しているので、 興味があれば使ってみてください。
例: 16進数 FF → 10進数 255

組み込みを学ぶなら、まずはこのあたりをしっかり理解しておくと後が楽になります。
以上、2進数・16進数の解説でした。ありがとうございました!