2017-02-09 60 views
-1

有點奇怪,C把字符常量當作int類型而不是char類型。例如,對於一個32位int的ASCII系統和一個8位的字符,代碼數據類型char的存儲

char grade = 'B'; 

上表示'B'爲存儲在32位的單元中的數值66,但級66捲起以8位單元存儲。 請解釋這一行。

+3

這是C是如何工作的。字符常量按C標準有一個'int'類型。 –

+0

不一定是8位uint。可能是其他寬度,也可能被燒焦,所有實現定義。 – user3528438

+1

@ user3528438; OP表示「8位單元」,而不是「8位單元」,並明確聲明*假設* int是32位,char是8位,並且系統使用ASCII。 –

回答

1

grade的類型爲char,它用int類型的表達式初始化。這是完全普通和合法的,並且int值被隱式轉換爲char類型。任何算術類型的值都可以隱式轉換爲任何其他算術類型。

這樣的隱式轉換就是爲什麼99%的時間,字符常量的類型爲int的事實不成問題;根據情況適當地轉換這些常量。

(請注意,在C++中字符常量是char型的。請記住,C和C++是兩種不同的語言。)

+1

@PSkocik:感謝您的編輯。我知道我的意思,它與我的手指爲我輸入的內容不符。 –