我最近絆倒了這樣的代碼:對於printf的整數參數,零填充寬度和精度是否相同?
uint32_t val;
...
printf("%.08X", val);
這是混淆了我。我的意思是,要麼指定0
+寬度或指定精度,兩者的意義何在?
寬度參數...控制字符 輸出的最小數目。如果輸出值中的字符數小於指定寬度的 ,則會添加空白...。如果寬度的前綴爲 0,則會添加前導零...。
寬度指定永遠不會導致值被截斷。 ...
...它由一個週期的隨後的非負十進制 整數,這取決於轉換類型,指定...的(。) 要輸出的有效位數。
類型決定的精度無論是解釋或 默認精度省略精密的情況...
d, i, u, o, x, X
- 精度指定要被打印的 的最小位數。如果參數中的位數比精度小 ,則輸出值將在左側用零填充。當位數超過精度時, 值不會被截斷。
所以我要麼使用"%08X"
或"%.8X"
但"%.08X"
沒有任何意義,我。
但它似乎確實沒有什麼區別,就是說,所有三個變體看起來都會產生相同的輸出。
這並不回答問題*爲什麼*它是這樣定義的,它只是表明它是。我會對OP的問題感興趣:「...兩者都有什麼意義?「 – 2013-03-11 07:18:59
@DanielFrey,編輯 – jrd1 2013-03-11 07:20:10
請注意,雖然'%08X'和'%.8X'表示同樣的事情,'%08d'和'%.8d'不會:一個打到8位數,另一個打到8字符,所以它們對於負值的行爲是不同的,'X'取一個無符號的值,所以它從來沒有符號 – hvd 2013-03-11 07:44:27