目前,我正在學習C程序,但我碰到一些奇怪的行爲 來到我的預期結果之一,但兩個結果印像這樣(i + 1)<ii和(i + 1)> ii都是如此嗎?
$ ./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位系統上) – fritzone
它已被刪除,但您最初擁有C++標記,您是否關心C++? –