2010-11-22 148 views
1
#include<stdio.h> 
int main() 
{ 
printf("%#04x",50); 
} 

有人向我展示了上面的代碼,我無法理解它,因爲我已經在C程序中使用了printf,但是第一次在我的生活中看到過這種用法。 爲什麼上面的代碼打印輸出照爲什麼下面的printf打印0x32

0x32 

可有一個人給我一個鏈接或參考了一些東西,這樣我可以更好地瞭解它。

+2

如果你已經指出了你期望看到的內容,它會有所幫助。 – 2010-11-22 14:39:33

回答

5

printf(3)手冊頁面:

的標誌字符

字符%後跟下列標誌的零個或多個:該值應被轉換爲一個「備用

#—形成」。對於o轉換,輸出字符串的第一個字符爲零(如果它已經不爲0,則加前綴0)。對於x和X轉換,非零結果的前綴爲字符串「0x」(或用於X轉換的「0X」)。對於a,e,E,f,F,g和G轉換,結果將始終包含一個小數點,即使沒有數字後跟一個小數點(通常,小數點只出現在這些轉換的結果中數字如下)。對於g和G轉換,結尾的零不會像結果一樣從結果中刪除。對於其他轉換,結果未定義。

省略其他標誌...

因此,%#預規劃 「0X」 的輸出,因爲輸出格式爲x。 0表示用於填充的0(零)。然後數字4表示要打印的字符總數是四個。如果已將數字4與10進行了交換,則輸出將會是0x00000032 –共10個字符。

+0

0不是預先標記'0x'的標誌的一部分。它用零指定填充而不是空格。在這個例子中,它最終變得無關緊要,因爲沒有填充。 – 2010-11-22 15:56:04

5

50十進制數是32個十六進制數。

除此之外,documentation應告訴你所有你需要知道的。

2

由於%x將給定值格式化爲十六進制。

事實上,0x32(十六進制)== 50(十進制)。

這是一個很好的primer供參考。

+0

好吧,這是很好的鏈接。 – 2010-11-24 08:09:20

相關問題