2012年4月2日月曜日

unsignedとint

unsigned (int)とintは両方とも整数ですが、+-の符号が付きかどうかの違いがあります。
intの場合は一番上位ビットが1の場合は負の数を表します。

この特質のために、下のプログラムは無限ループに陥ってしまいます。
unsigned i;
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 件のコメント :

コメントを投稿