今日のコード
compare.c
#include <stdio.h>
int main(void) {
int x = -1;
unsigned int y = 1;
printf("%d\n", x < y);
}
これは何を出力するでしょうか?
答え
0。この比較には通常の算術型変換が適用されます。xとyは同じランクなので、<が実行される前に符号付きのxがunsigned intに変換されます。-1はunsigned intとして取りうる最大値になり、1uより小さくなることはありません。標準規格で明確に定義された動作ですが、毎行の符号を意識しなくなった途端に忘れやすい落とし穴です。