【发布时间】:2014-03-31 12:21:05
【问题描述】:
我目前正在学习 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;
}
【问题讨论】:
-
0x7fffffff + 1 = 0x80000000
-
gcc (Ubuntu/Linaro 4.7.2-2ubuntu1) 4.7.2 正确(在 32 位系统上)
-
它被删除了,但你原来有C++标签,你关心C++吗?
-
@ShafikYaghmour 你是对的!
标签: c undefined-behavior integer-overflow