質問は実際にはこのスニペットから来ています
int a = -1;
unsigned int c=1;
long long b = c<<31;
printf("%d %lld %d\n",a,b,a>b);
Linux gcc (GCC) 4.4.6 20110731 (Red Hat 4.4.6-3) でテストしました。結果は -1 2147483648 0 です。
実際、私は結果を理解できません。私の意見では、a>b を実行すると、最初に a が long long に変換されるため、a は 0000...01111...1(32 個のゼロ + 32 個の 1)、b は 000..01000...00 ( 32 個のゼロ + 1 個のゼロ + 31 個のゼロ) の場合、a は b より大きくなければなりません。
C ++で整数比較の何かが欠けていますか?