好吧其實我已經研究瞭如何使用循環來提高我的代碼的效率,以便我可以使用特定的應該重複的代碼塊,而不必一遍又一遍地輸入代碼,並且在嘗試之後爲了使用迄今爲止學到的東西來編程,我覺得是時候進入下一章,學習如何使用控制語句來學習如何指導程序做出決定。關於C參數促銷的問題
但事情是,在我向前邁進之前,我仍然有一些問題需要任何專家對以前的東西的幫助。其實它是關於數據類型的。
A.字符類型
- 我提取書Ç的Primer Plus第五版如下:
有些奇怪的是,C將字符 的constans類型
int
而不是char
。例如,ASCII系統 與一個32位int
和一個8位char
上,代碼:char grade = 'B';
表示
'B'
作爲數值存儲在一個32位的單元 66,grade
66個存儲的ub ab 8位 單位。字符 常數的這一特性使得可以將定義 的字符常量(例如'FATE'
, )與以32位單元存儲的四個單獨的8位ASCII碼 進行定義。然而, 試圖僅在最後8位指定,例如恆定的char
可變結果 字符 被使用,所以 可變得到值'E'
。
所以我讀這當然是後做的下一件事,遵循什麼它提到,那就是我試圖對一個變量的話
FATE
存儲與char grade
並嘗試編譯,看看它會使用printf()
存儲,但不是打印出字符'E'
,我得到的是'F'
。這是否意味着書中有一些錯誤?或者有什麼我誤解了?
從上面的句子中,有一行說C將字符常量當作
int
類型。所以要嘗試一下,我給char
類型分配一個大於255
(e.x.356
)的數字。由於
356
是32位int
(我運行Windows 7)的範圍內,因此,我希望它會打印出356
當我使用%d
符。但不是打印
356
,它給我100
,這是最後的8位值。這是爲什麼發生?我以爲
char == int == 32-bits
? (雖然它在char之前只提到了一個字節)。
B. int和浮動型
我明白當在可變的數存儲在
short
類型被傳遞給可變參數函數或任何隱式原型函數,它會自動升級到int
類型。這也發生在浮點型,當通過與
float
型浮點數字,它會被轉換爲double
類型,這就是爲什麼沒有說明符的float
類型,而是有隻%f
爲double
和%Lf
對於long double
。但是,爲什麼有一個爲
short
類型說明符儘管它也有促進作用,但不是float
類型?爲什麼他們不給float
類型的說明符,並使用類似%hf
之類的修飾符?這背後有什麼邏輯或技術?
char始終是1個字節,所以當您存儲的範圍超過該範圍時,它將在未簽名時包裝。對於簽名如果它將包裝或不包裝是依賴於實現,但通常包裝到-ve。我認爲'FATE'問題與機器字節順序有關,可能與實現相關,因爲我將'E'作爲輸出。 – phoxis 2011-05-15 14:07:03
如果按字節表示8位,則不表示不是。 http://www.ibm.com/developerworks/power/library/pa-ctypes1/#N1007D – Joe 2011-05-15 14:12:29
請不要一次詢問10個問題。這不是一個討論論壇等等。 – 2011-05-15 14:26:47