2進数と16進数の関係と変換方法
1.目的
- 16進数について理解する。
- 2進数から16進数への変換、関係性について理解する。
- これらは、整数場合について記載している。少数は対象としていない。
目次
2. 16進数とは
・16で桁が一つ繰り上がる数字の事。
(n進数とは、nで桁が一つ繰り上がる数字のことを言う)
・0~9とA,B,C,D,E,Fの組み合わせで表される数字。
・10進数で10の場合、16進数ではAと表現する。
・16進数の1桁は、2進数の4桁に相当する。
例えば、16進数の「A」は2進数の「1010」に相当し、
「F」は「1111」に相当する。
3. 16進数と2進数と10進数の関係
・10進数は、0~9の数字で表され、9の次に10となる。
・2進数は、0~1の数字で表され、1の次に10となる。
・16進数は、0~9とA,B,C,D,E,Fで表され、Fの次に10となる。
・下記に、16進数、10進数、2進数の関係を示す。
16進数 | 10進数 | 2進数 |
---|---|---|
0x0001 | 1 | 0b0001 |
0x0002 | 2 | 0b0010 |
0x0003 | 3 | 0b0011 |
0x0004 | 4 | 0b0100 |
0x0005 | 5 | 0b0101 |
0x0006 | 6 | 0b0110 |
0x0007 | 7 | 0b0111 |
0x0008 | 8 | 0b1000 |
0x0009 | 9 | 0b1001 |
0x000A | 10 | 0b1010 |
0x000B | 11 | 0b1011 |
0x000C | 12 | 0b1100 |
0x000D | 13 | 0b1101 |
0x000E | 14 | 0b1110 |
0x000F | 15 | 0b1111 |
0x0010 | 16 | 0b10000 |
0x0011 | 17 | 0b10001 |
4. 2進数から16進数への考え方
・2進数から16進数へは、基本的に2進数4桁ずつ分け、
それを16進数にそれぞれ変換する。
例:2進数が1010010101を16進数にする場合。
→10 1001 0101
下4桁を抜き出すと: 0101
次の4桁を抜き出すと:1001
次の4桁を抜き出すと:10 (0010と考える)
それぞれを16進数に変換
・0101→2×2+2×0 = 5 (16進数1桁目)
・1001→2×4+ 2×0 = 9 (16進数2桁目)
・0010→2×1 + 2×0 = 2 (16進数3桁目)
※よって、1010010101を16進数で表すと、295となる。
例2:2進数で0110101011010101を16進数にする場合
→0110 1010 1101 0101
・0101→4 + 1 = 5 (16進数1桁目)
・1101→8 + 4+ 1 = 13 = D (16進数2桁目)
・1010→8+2 =A (16進数3桁目)
・0110→4+2 =6 (16進数4桁目)
※よって、0110101011010101を16進数で表すと6AD5となる。
(2進数の1111を、10進数の8,4,2,1と考え、
2進数の1の所を足し、0は0とすればよい。
上の1101は8,4,0,1と考えて、それぞれ足して13となる。)
2進数から10進数へは下記記事を参照
→ソフトウェア基礎知識(2進数から10進数) - Project_OKI’s diary
5. 16進数から2進数への考え方
・これは先ほどと逆の考え方をすればよいので、
16進数の1桁を2進数4桁に変換する。
例:6AD5を2進数にすると。
6→0110
A→1010
D→1101
5→0101
よって、0110 1010 1101 0101になる。
AやDを2進数にする考え方
奇数の場合は、必ず0001と0bit目が1になる。
後は、8,4,2で近い値の暗算は難しくない。
例えば7だったら 6 + 1で4+2+1に分けられるので。0111になる。
10進数から16進数と、16進数から10進数への変換は、
基本的な考え方は2進数と変わらない。
2だった所を16に置き換えて考えれば出来る。
参考:ソフトウェア基礎知識(2進数から10進数) - Project_OKI’s diary
例:6AD5は10進数にすると: 16^3*6+16^2*10+16*13+5 = 27349
例:27349/16 = 1709余り5
1709/16 = 106余り13(D)
106/16 = 6 余り10(A)
6/16 = 0 余り6
よって、6AD5となる。
詳しく知りたい場合は、下記本が分かりやすい。
→ キタミ式イラストIT塾 基本情報技術者 令和04年 [ きたみりゅうじ ]
6. プログラムの作成(2進数を10進数、16進数変換)
2進数を8進数、10進数、16進数で表示するプログラム。
C言語では、8進数、10進数、16進数の表示はフォーマット指定子があり、
printfでそのまま出力が出来る。
フォーマット指定子については下記記事の主なフォーマット指定子を参照
→組み込みの為のC言語基礎知識1(printf) - Project_OKI’s diary
//2進数を8,10,16進数で表示する。 #include <stdio.h> int main(void) { int n; n = 0b0110101011010101; /* 2進表記 */ printf("n = %o(8進数)\n", n); ///8進数 printf("n = %d(10進数)\n", n); ///10進数 printf("n = %x(16進数)\n", n); ///16進数 return 0; }
結果:https://paiza.io/projects/Cz7IY0pBjv2qjgrZCNmhJA?language=c
7. プログラムの作成(2進数、8進数、16進数を10進数で表示)
/*数値の表し方 */ #include <stdio.h> int main(void) { int n; n = 0b10100; /* 2進表記 */ printf("n = %d\n", n); n = 024; /* 8進表記 */ printf("n = %d\n", n); n = 20; /* 10進表記 */ printf("n = %d\n", n); n = 0x14; /* 16進表記 */ printf("n = %d\n", n); return 0; }
結果:https://paiza.io/projects/847D89GGEKRr-xHxWNy83w?language=c
参考書籍:
変換方法などについても記載しており、マイコンを使用する上で必要な基本的な内容が記載してある。
|
関連記事
ソフトウェア基礎知識:
・ソフトウェア基礎知識(2進数から10進数) - Project_OKI’s diary
C言語:
・組み込みの為のC言語基礎知識1(printf) - Project_OKI’s diary
・C言語基礎知識2(for分で処理を繰り返す) - Project_OKI’s diary
・C言語基礎知識3(配列) - Project_OKI’s diary