Namara

毎日コード。手助けなし。

今日のコード

compare.c

#include <stdio.h>

int main(void) {
    int x = -1;
    unsigned int y = 1;

    printf("%d\n", x < y);
}

これは何を出力するでしょうか?

答え

0。この比較には通常の算術型変換が適用されます。xyは同じランクなので、<が実行される前に符号付きのxunsigned intに変換されます。-1unsigned intとして取りうる最大値になり、1uより小さくなることはありません。標準規格で明確に定義された動作ですが、毎行の符号を意識しなくなった途端に忘れやすい落とし穴です。