質問: 0; } } for (i=15; i>=0; i--){ printf("%d", x[i]); } printf("\n"); }
回答: 10進数を2進数に変換するには、商が0になるまで2で割り続けます。そして余りを逆順に並べます。(だいぶ説明下手になっちゃったので画像載せておきます) 例えば、10進数の14だったら、 14÷2 = 7 余り 0 7÷2 = 3 余り 1 3÷2 = 1 余り 1 この余りを下から上の順番で並べると 110 これが14を二進数で表した形です。 このプログラムは16bit(16ケタ)で表すようにできてるので、 0000000000000110 と表示されると思います。 for (i=0; i<16; i++){ if(n>0){ x[i] = n % 2; n /= 2; }else{ x[i] = 0; } } ↑これは、x[i]にn÷2の余りを入れて、nをn÷2の商に置き換えています。 例えば最初に書いた例だと、 x[0]に14÷2の余りである0を入れて、nを14÷2の商である7に変更 ↓ x[1]に7÷2の余りである1を入れて、nを7÷2の商である3に変更 ↓ x[2]に3÷2の余りである1を入れて、nを3÷2の商である1に変更 ↓ x[3]に1÷2の余りである1を入れて、nを1÷2の商である0に変更 ↓ n>0ではないので、x[4]に0を入れる ↓ 以下i = 15までx[i] に0を入れる という感じです。 これでx[15]~x[0]の順に並べると 0000000000001110 となります。最後のfor文でx[15]~x[0]の順に出力しています。