#include <stdio.h>
int main()
{
int x = 0x80000000;
int y = 0x80000001;
printf("x=%d, y=%d\n", x, y);
printf("(-x)=%d, (-y)=%d\n", (-x), (-y));
if (x > y)
printf("x=%d > y=%d\n", x, y);
else
printf("x=%d < y=%d\n", x, y);
if ((-x) > (-y))
printf("(-x)=%d > (-y)=%d\n", (-x), (-y));
else
printf("(-x)=%d < (-y)=%d\n", (-x), (-y));
return 0;
}
$gcc test.c
$ ./a.out
x=-2147483648, y=-2147483647
(-x)=-2147483648, (-y)=2147483647
x=-2147483648 < y=-2147483647
(-x)=-2147483648 > (-y)=2147483647
很奇怪,為什么呢?x是最小的有符號整數,那么他的取反應該還是最小的有符號整數,為什么最后是(-x) > (-y),明明從-x和-y的值看,是(-y)>(-x)。
uj5u.com熱心網友回復:
int型的最大整數就是2147483647,不存在2147483648uj5u.com熱心網友回復:
printf("(-x)=%ld < (-y)=%d\n", (-x), (-y));試下這行代碼就變了uj5u.com熱心網友回復:
-x已經發生了自動型別提升,由int變為unsigned int,值為2147483648,所以-x>-y,只是列印的時候還把它當成int轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/8157.html
標籤:C語言
上一篇:八數碼問題:逆序數相同一定有解?
