これは10進数を2進数に変換するプログラムの例なのですが
c
1int main(void) 2{ 3 /* 変数の宣言 */ 4 int i, decimal; 5 int binary[32]; 6 7 /* 10進数の入力 */ 8 printf("10進数 = "); 9 scanf("%d", &decimal); 10 11 /* 10進数→2進数の変換 */ 12 for(i=0;decimal>0;i++){ 13 binary[i] = decimal % 2; 14 decimal = decimal / 2; 15 } 16 17 /* 2進数の出力 */ 18 printf(" 2進数 = "); 19 while( i>0 ){ 20 printf("%d", binary[--i]); 21 } 22 printf("\n"); 23 24 return 0; 25} 26
の/* 10進数→2進数の変換 */の部分のdecimal=decimal / 2 だといつまでも負にならずforループの条件のdecimal>0が真であり続けてしまうと感じるのですがこれは正しく動くみたいです。
decimal % 2のところで例えば非整数(1/2)%2となったときプログラム内でどのような挙動をとっているのですか?
>いつまでも負にならず・・・正の数を割ってるだけですから負に成ることはありません・・・何故そう思ったのでしょうか?
また、intですから非整数(1/2)・・・0.5にはなりません。
ある数を整数で割り続けても0に近づくだけだと思ったのでそう考えてしまいました。int型だと1/2は0になるのですか。型については考えれていませんでした。ありがとうございます