我有一個需要從任何專家指導一個問題:與short
類型的值作爲參數傳遞給printf()
功能拼圖由C短類型提升爲int
,它會自動晉升爲
int
類型,這就是爲什麼printf()
函數將看到的值爲int
類型而不是short
類型。所以基本上
short
類型是16位寬,是0000000000000000
而int
類型是32位寬,是00000000000000000000000000000000
。比方說,我聲明一個變量調用
num
與short
類型和-32的值,這意味着short
類型的最顯著位初始化這將是1
,這是0000000011100000
。當我將該值傳遞給
printf()
,它會被轉換爲int
類型,所以它會成爲00000000000000000000000011100000
。在步驟4中,當它轉換爲
int
時,最高有效位爲0
。爲什麼當我使用
%hd
說明符或甚至是%d
說明符時,它仍然會提示我輸入一個負值而不是正值?
+1:在2的補碼中,這是絕對正確的。對於其他表示,會發生相同的情況。 – 2011-05-09 09:24:31
奧利說什麼 - 準確地說,從「短」到「詮釋」時,數字的真正數學價值被保留。在2的補碼和1的補碼中,這意味着符號擴展。在符號幅度中,它表示符號位右側的零填充。 – 2011-05-09 09:43:36