intの場合は一番上位ビットが1の場合は負の数を表します。
この特質のために、下のプログラムは無限ループに陥ってしまいます。
unsigned i;
for(i = 10; i >= 0; i--){
printf("aaa\n");
}
for(i = 10; i >= 0; i--){
printf("aaa\n");
}
iが10のときから始まって、10は2進数で
00...1010
それが0まできます。
00...0001
00...0000
for分はさらにi--を実行してから真ん中の条件式をチェックしますので、iは
11...1111
になります。
iはunsignedなので処理型にもよりますが、かなり大きな値になってまたプログラムが続いてしまいます。
気を付けましょう。
0 件のコメント :
コメントを投稿