2009-09-29 54 views
6

我期待這打印一個非常大的數字和相同的數字-1,但它只是打印-1和-2,這是爲什麼?c爲什麼這打印一個負數?

fprintf(stderr, "%d\n", 0xffffffff); 
fprintf(stderr, "%d\n", 0xfffffffe); 

回答

30

%d格式是一個有符號整數(十進制)。使用two's complement存儲整數,這意味着高位(8000 0000)以某種方式表示值的符號。

計數從3倒,值:

0000 0003 = 3 
0000 0002 = 2 
0000 0001 = 1 
0000 0000 = 0 
FFFF FFFF = -1 
FFFF FFFE = -2 

如果你想FFFF FFFF顯示爲一個大的正數,使用%u(無符號)格式。

+0

哦,最長的是多少%?或未簽名? – user105033

+0

%u - 剛添加到響應中:) –

+3

int是%d,unsigned是%u,long int是%ld,long unsigned是%lu –

3

上有符號整數的第一位是符號,這樣可以存儲最高的數字是0xEFFFFFFF。