以下所有產生的ffffffef
相同的輸出:以十六進制打印負數時是否有隱含的字大小?
printf("%x\n", -17);
printf("%2x\n", -17);
printf("%8x\n", -17);
爲什麼?
以下所有產生的ffffffef
相同的輸出:以十六進制打印負數時是否有隱含的字大小?
printf("%x\n", -17);
printf("%2x\n", -17);
printf("%8x\n", -17);
爲什麼?
%x
in printf()
預計有unsigned int
的說法。假設int
是32位,在您的示例中,-17
轉換爲4294967279u
(0xffffffef
)。這意味着即使您使用的是%x
或%2x
,格式化的輸出至少也是8個字符。
如果使用你會得到不同的結果:
printf("%hx\n", -17); // ffef
在這個例子中,%hx
期待一個unsigned short
,因此不同的結果。
在%2x
,%4x
和%8x
,這裏的數字表示將被打印的最小字符寬度。現在由於ffffffef
的寬度是8個字符,所以三種情況的打印方式都相同,因爲字符寬度是指定的數字>=
。如果指定格式時的數字爲>= 8
,那麼您會在開始處看到額外的空間(這取決於您如何指定打印格式)。
謝謝。我試過'printf(「%02x」,(簡稱)-17);'它仍然是8個十六進制數字。所以,無論參數是什麼類型,它總是會被轉換爲一個unsigned int? –
@OldGeezer使用格式說明符'%x'或'%X',是的。 –