我期待這打印一個非常大的數字和相同的數字-1,但它只是打印-1和-2,這是爲什麼?c爲什麼這打印一個負數?
fprintf(stderr, "%d\n", 0xffffffff);
fprintf(stderr, "%d\n", 0xfffffffe);
我期待這打印一個非常大的數字和相同的數字-1,但它只是打印-1和-2,這是爲什麼?c爲什麼這打印一個負數?
fprintf(stderr, "%d\n", 0xffffffff);
fprintf(stderr, "%d\n", 0xfffffffe);
%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
(無符號)格式。
你提到的值是-1的二進制補碼錶示和-2
上有符號整數的第一位是符號,這樣可以存儲最高的數字是0xEFFFFFFF。
參數「%d」將輸入打印爲有符號整數。因此,您發現了two's complement representation,請考慮「%u」。
哦,最長的是多少%?或未簽名? – user105033
%u - 剛添加到響應中:) –
int是%d,unsigned是%u,long int是%ld,long unsigned是%lu –