我目前正在学习C语言编程,但是我遇到了一些奇怪的行为。我期望只输出一个结果,但实际上却输出了两个结果,如下所示:
$ ./a.out
yes1 0x80000000
yes3 0x80000000
怎么可能呢?
我无法理解这个结果。
OS : x86_64 Ubuntu Linux
C compiler : gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1
gcc -O2 weird.c
#include <stdio.h>
int main() {
int i = 0x7fffffff;
int ii = 0x0000000f;
if ((i + 1) < ii)
printf ("yes1 %#x\n", i + 1);
if ((i + 1) == ii)
printf ("yes2 %#x\n", i + 1);
if ((i + 1) > ii)
printf ("yes3 %#x\n", i + 1);
return 0;
}