这个问题实际上来自这个片段
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 个),b 为 000..01000...00( 32 个零 + 一个 + 31 个零),那么 a 应该大于 b。
我是否缺少 C++ 中的整数比较?