2014-10-30 65 views
-1

我一直在看Zed A. Shaw的「Learn C hard way」教程。他的一個額外信貸問題(練習9)要求我代表char[4]作爲int%用於表示整數的X格式說明符

跑遍了全後,我來到了一個SO問題,這是同樣的事情,因此設法想出答案:

int i; 
int intName = 0; 

for(i = 0; i < 4; i++){ 
    intName = intName + name[i]; 
} 

printf("intName: %d\n", intName); 
printf("intName: %X\n", intName); 

輸出:

intName: 291 
intName: 123 

手頭的名字是「Zed」,我計算了ASCII十進制值,他們確實加起來爲291,這很好。然而,在搜索後,我找不到任何解釋,爲什麼%X將返回123.

在這種情況下,此格式說明符是做什麼的?如果我想得到一些關於發生什麼的詳細答案,那將是非常棒的。學習C似乎更深入,我覺得我應該完全理解這些基本知識,然後再轉向其他任何東西。

+1

我不認爲你的解決方案是該問題的作者想到的。您只需添加字符的序數值,例如'「Zed」'和'「edZ」'會產生相同的結果,就像其他許多不同字符的組合一樣。我認爲你需要更仔細地閱讀練習。 (我假設這個問題本身是相當明確的,但我沒有檢查。) – 2014-10-30 18:11:55

+0

當以十六進制打印一個數字時,最好在它前面加上'0x'或'0X'來清楚閱讀器(假設讀者對C語法有所瞭解):'printf(「intName:0x%X \ n」,intName);' – 2014-10-30 18:13:02

+0

@KeithThompson - 我明白你的意思,可能是這樣的情況,Extra Credits部分相當含糊,主要是幫助你探索你通常不會探索的東西。如果你希望看看Zed A. Shaw的教程練習9以更好地瞭解他所要求的內容。至於你的第二個評論,你是對的,最好用一個0x表示十六進制。謝謝! – Juxhin 2014-10-30 18:16:44

回答

1

但是搜索後我找不到任何解釋爲什麼%X將返回123

這只是印刷數量的十六進制表示。十六進制123 =十進制291.從printf man page(第一我偶然發現):

O,U,X,X
將unsigned int參數被轉換爲無符號八進制(○),無符號十進制(u)或無符號十六進制(x和X)表示法。字母abcdef用於x轉換;字母ABCDEF用於X轉換。精度(如果有的話)給出必須出現的最小位數;如果轉換後的值需要較少的數字,則在左側用零填充。默認精度爲1.當0以顯式精度0打印時,輸出爲空。

+0

感嘆,必須是簡單的事情..非常感謝喬恩! – Juxhin 2014-10-30 17:55:35