在c**中,常量是表示乙個固定值的記號,它可能是整型、浮點型、字元、或乙個串。乙個常量的型別由它的值和記法來決定。
這裡討論的常與混合常量不同,混合常量在c99
標準中介紹,它通常是可修改的物件,類似於變數,了解混合常量的詳細介紹和特殊操作可參見第五章。
乙個整型常量可以以普通的十進位制數表示,或者是八進位制或十六進製制,總之你必須通過字首指定乙個型別。
乙個十進位制常量以乙個非0
的數字開始,例如,255。
乙個以前導0
開始的數值被解釋為八進位制,八進位制(
以8為基數)
僅使用數字0
到7。例如,047
是乙個合法的八進位制常量,表示4 * 8 + 7
,它與十進位制常量39
等價。十進位制常量255
與八進位制常量0377
相等。
十六進製制常量以字首0x
或0x開始,十六進製制數字a
到f可以使用大寫或小寫。例如,0xff,0xff,0xff,
這些均表示同乙個十六進製制常量,其值與十進位制常量255
相等。
因為你定義的整型常量最終將被用於表示式和宣告中,它們的型別很重要,常量的型別在它的值被定義的同時已經確定下來,例子中的整型通常具有int
型別。然而,如果乙個整型的值超出int
型別的範圍,這時,它必須使用乙個更大的型別,既然這樣,編譯器在分配它時會有層次地首先使用乙個足夠大的型別來表示此值。例如,十進位制常量型別層次如下:
int, long, long long
對於八進位制和十六進製制常量,其型別層次是:
int, unsigned int, long, unsigned long, long long, unsigned long long
例如,在乙個16
位的系統上,整型常量50000
使用的型別是long
,因為此系統上int
的最大值為32,767
,或者215 – 1。
你也可以在程式中顯式地使用字首來改變常量的型別,乙個帶有字首l
或l具有型別long(
如果有必要,會使用更大的型別,與剛才提及到的層次一致)
,同樣地,帶有字首ll
或ll的常量最少具有型別long long,
字首u或u
可能用來保證常量具有乙個無符號型別。字首long
和unsigned
可以進行組合,table 3-1
給出了一些例子。
table 3-1. examples of constants with suffixes
整型常量 型別
0x200
int512u
unsigned int
0llong
0xf0ful
unsigned long
0777ll
long long
0xaaallu
unsigned long long
C核心技術手冊(二十四)
在 c中,不同型別的操作可以化合成乙個操作,例如,下面的表述式 double dvar 2.5 define dvar as a variable of type double.dvar 3 multiply dvar by an integer constant.if dvar 10l compa...
C核心技術手冊(二十五)
型別轉換通常存在於任意兩個算數型別中,當必要時,編譯器隱式地執行它們,如果新型別能夠表示它,此種轉換將保護它的值,這通常也並不絕對,例如,當你將乙個負數轉換為無符號型別,或將乙個浮點數的小數部分由 double 轉換為int 時,新型別不能表示原來的值,在這種情況下,編譯器會產生乙個告警。4.1.1...
C核心技術手冊(二十七)
4.1.5 算術型別轉換結果 由於不同的型別有不同的目的 特性和侷限性,將乙個型別轉換為另一型別通常要處理這些差異,通常,乙個型別轉換後的值取決於目標型別的特性。4.1.5.1 bool 型別轉換 任何標量型別可被轉換為 bool,結果為0i.e.當標量值為 o時,使用 false 當標量值為 1時...