dポイントプレゼントキャンペーン実施中!

C言語の2進数変換プログラムのソースコード

順を追って説明してもらえると助かります。よろしくお願いします。

int main(void)

{

  /* 変数の宣言 */

  int decimal;←10進数

  int binary = 0;←2進数

  int base = 1;←これなに?

 

  /* 10進数の入力 */

  printf("10進数 = ");

  scanf("%d", &decimal);

 

  /* 10進数を2進数に変換 */ここら辺が良くわかりません

  while(decimal>0){

    binary = binary + ( decimal % 2 ) * base;

    decimal = decimal / 2;

    base = base * 10;

  }

 

  /* 変換した2進数の出力 */

  printf(" 2進数 = %d\n", binary);

 

  return 0;

A 回答 (2件)

使えない糞プログラムだから憶えない方が良いかもしれないが。



ここでやっていることは入力された数の2進表記と同じになる10進数を求めている。
baseは2進桁数を表している。

ちょっと大きな数を入力すればすぐにオーバーフローしてしまうので実用には全くならないし数の概念の理解にも役立たない。
    • good
    • 3

例えば、decimalに「123」って数値が入力されたとして、



123を、
123を2で割って余りを取ると、61 あまり 1
61を2で割って余りを取ると、30 あまり 1
30を2で割って余りを取ると、15 あまり 0
15を2で割って余りを取ると、7 あまり 1
7を2で割って余りを取ると、3 あまり 1
3を2で割って余りを取ると、1 あまり 1
1を2で割って余りを取ると、0 あまり 1
なので、2進数に変換した値は↑のあまりを下から並べて「1111011」だって感じでしょうか。


/* 10進数を2進数に変換 */ここら辺が良くわかりません
while(decimal>0){
 binary = binary + ( decimal % 2 ) * base;
 decimal = decimal / 2;
 base = base * 10;
}

decimalが123(>0)で1回目のループは、
 binaryに、(123を2で割ったあまり)×1を加算、0+1=1
 decimalを2で割って61に
 baseは10倍して10

decimalが61(>0)で2回目のループは、
 binaryに、(61を2で割ったあまり)×1を加算、1+10=11
 decimalを2で割って30に
 baseは10倍して100

decimalが30(>0)で3回目のループは、
 binaryに、(30を2で割ったあまり)×1を加算、11+0=11
 decimalを2で割って15に
 baseは10倍して1000

decimalが15(>0)で4回目のループは、
 binaryに、(15を2で割ったあまり)×1を加算、11+1000=1011
 decimalを2で割って7に
 baseは10倍して10000

decimalが15(>0)で5回目のループは、
 binaryに、(7を2で割ったあまり)×1を加算、1011+10000=11011
 decimalを2で割って3に
 baseは10倍して100000



と、baseは求めたあまりをbinaryに加算する際に、下から2桁目は10、下から3桁目は100って掛け算して加算するための変数です。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!