Project_OKI’s diary

エンジニアの勉強ブログ

ソフトウェア基礎知識(2進数から10進数)

2進数の求め方、10進数を2進数に変換

1.目的

  • 2進数について理解する。
  • 10進数を2進数に変換する方法について学習する。

 

目次

2. 2進数とは

 ・2で桁が一つ繰り上がる数字の事。

 ・0と1の組み合わせで表される数字。

 

3. 2進数と10進数の関係

 ・10進数は、0~9の数字で表され、9の次に10となる。

 ・2進数は、0~1の数字で表され、1の次に10となる。

 ・10進数を2進数で表すと、下記となる。

10進数 2進数
0 0
1 1
2 10
3 11
4 100
5 101
6 110
7 111
8 1000
9 1001
10 1010
11 1011
12 1100
13 1101
14 1110
15 1111
・・・

 

 

4. 2進数から10進数に変換(計算)する方法

・10進数の2桁目、3桁目と10の累乗の関係は、

 10進数の1000は、10の3乗

 10進数の100は、10の2乗

 10進数の10は、10の1乗

 10進数の1は、10の0乗

 となる。 

 桁数と10の累乗の関係:n桁目とn乗は、同じnとなる。

 

・これは、2進数でも同じことがいえる。

 2進数の2桁目、3桁目と2の累乗の関係は

 2進数の1000は、2の3乗

 2進数の100は、2の2乗

 2進数の10は、2の1乗

 2進数の1は、2の0乗

 となる。

 

 この関係から、2進数から10進数には下記のように求められる。

 ・2のn乗×(0 or 1)  + 2の(n-1)乗×(0 or 1)  + 2の(n-2)乗×(0 or 1) +・・2の0乗×(0 or 1) 

 

 例えば、2進数の1000を10進数にすると。

 2の3乗×1 + 2の2乗×0 + 2の2乗×0 + 2の1乗×0 + 2の0乗×0

 = 8+0+0+0+0

 

 例えば、2進数の10001を10進数にすると。

 2の4乗×1 + 2の3乗×0 + 2の2乗×0 + 2の2乗×0 + 2の1乗×0 + 2の0乗×1

 = 16+0+0+0+0+1

 =17

 

5. 10進数から2進数に変換(計算)する方法

 10進数から2進数は、2進数から10進数にした場合の逆を考えればよい。

 ・10進数の整数をNとすると。

  →N - (2のn乗 + 2のn-1乗 + 2のn-2乗 +・・・ 2の0乗) = 0

  となる組み合わせを出す。

 例えば

 ・10進数の18を2進数にするには。

  ・18 - 16(2の4乗) = 2

  ・2-2(2の1乗) = 0

  よって、10010となる。

 

 ただ、上記のやり方だと大変な為、下記やり方がある。

 ・10進数を2で割っていき、商が1となるまで、割る。

 ・その余りを最後から順番に並べる。

 ・これで2進数に変換できる。

 

 例:

 ・10進数の整数が109とし、それを2進数にすると。

  109/2 = 54余り1

  54/2 = 27 余り 0

  27/2 = 13 余り1

  13/2 = 6   余り1

  6/2 = 3  余り0

  3/2   = 1  余り1

  1/2 = 0  余り1

  これを、下から並べて、1101101となっている。 

  この書き方をするとやりやすい。

 

 ・18をこの方法でやると。

  18/2 = 9・・・0

  9/2 = 4・・・1

  4/2 = 2・・・0

  2/2 = 1・・・0

  1/2 = 0・・・1

  ※18を2進数では10010となる。

  

 詳しく知りたい場合は、下記本が分かりやすい。

 → キタミ式イラストIT塾 基本情報技術者 令和04年 [ きたみりゅうじ ]

 

4.プログラムの作成(10進数の2進数変換)

 10進数を2進数に変換するプログラム

 C言語では、8進数、10進数、16進数の表示はprintfで出来るが、

 2進数を表示するフォーマット指定子はない。

 ここでは、10進数を2進数に変換する関数を作成する。

 

 上記5.10進数から2進数に変換する方法から下記のようなプログラムを作成する。

 10進数をNとすると、

 2進数の算出は

  (1) N/2の余りを算出し、格納する。

  (2) N/2の値を算出する。

  (3) (1)~(2)をN/2>0の間繰り返す。

  (4) 格納した値を逆から表示する。

  日本語だと少しわかりずらいため、フローチャートを示す。

           

               

 

 

 これを元に、C言語で10進数を2進数に変更するプログラムを作成する。

  ・プログラム内容:

   →2進数に変換し、表示する関数を作成する。

   →0b1110と31を、10進数と2進数で表示する。

    (0bxx は2進数を表す)

#include <stdio.h>

//2進数変換関数
//引数:数値
//機能:入力した数値の2進数をprintfで出力する。
void second(int NUM)
{
    //変数の宣言
    int b[100];     //格納用の配列
    int i=0;        //カウント用変数
 
    //10進数を2進数に変換
    while(NUM>0){     //NUMが0より大きい間ループ
        b[i]=NUM%2;   //NUM/2の余りをb[i]に格納
        NUM/=2;       //NUM/2を計算
        i++;          //i+1
    }
  
    //2進数の値を出力
    printf("2進数:");
    while(i>0){
        i--;          //i-1
        printf("%d",b[i]);    //格納した値を出力
    }
    printf("\n");     //改行
}

int main(void){
    //変数宣言
    int A;
    int B;
    
    //値代入
    A = 0b1110;
    B = 31;
    
    //10進数と2進数をそれぞれ出力
    printf("10進数:A = %d\n",A);
    second(A);
    printf("10進数:B = %d\n",B);
    second(B);
}

 実行結果:https://paiza.io/projects/WCbvF5Jr80aEcT69ItzVug?language=c

 

関連記事

過去の記事:

知らないと損するお金の話(ふるさと納税、確定申告とワンストップ納税どっちが得?) - Project_OKI’s diary

C言語基礎知識6(関数) - Project_OKI’s diary

C言語基礎知識7(構造体1) - Project_OKI’s diary

C言語基礎知識8(enum:列挙型) - Project_OKI’s diary

C言語基礎知識9(typedef) - Project_OKI’s diary

C言語基礎知識10(extern宣言) - Project_OKI’s diary

C言語基礎知識11(#define) - Project_OKI’s diary

 

組み込みC言語