2015-06-21 47 views

回答

1

%x in printf()預計有unsigned int的說法。假設int是32位,在您的示例中,-17轉換爲4294967279u0xffffffef)。這意味着即使您使用的是%x%2x,格式化的輸出至少也是8個字符。

如果使用你會得到不同的結果:

printf("%hx\n", -17); // ffef 

在這個例子中,%hx期待一個unsigned short,因此不同的結果。

+0

謝謝。我試過'printf(「%02x」,(簡稱)-17);'它仍然是8個十六進制數字。所以,無論參數是什麼類型,它總是會被轉換爲一個unsigned int? –

+0

@OldGeezer使用格式說明符'%x'或'%X',是的。 –

0

%2x,%4x%8x,這裏的數字表示將被打印的最小字符寬度。現在由於ffffffef的寬度是8個字符,所以三種情況的打印方式都相同,因爲字符寬度是指定的數字>=。如果指定格式時的數字爲>= 8,那麼您會在開始處看到額外的空間(這取決於您如何指定打印格式)。