Project_OKI’s diary

エンジニアの勉強ブログ

ソフトウェア基礎知識2(2進数から16進数への変換方法)

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

 

参考書籍:

変換方法などについても記載しており、マイコンを使用する上で必要な基本的な内容が記載してある。


 

 

 

組み込みC言語