字面常數,「字面」是因為我們只能夠論及其數值,「常數」是因為其值不可改變,例如,1這樣的一個數值出現在程式中,我們稱它為字面常數。每一個字面常數有一個對應的型別,例如0的型別為int,3.14159型別為double。我們說字面常數是「不可取址」,因為數值雖然的確儲存於電腦記憶體的某處,但我們無法處理其位值。
C++有五種字面常數:整數字面常數、浮點數字面常數、bool字面常數、字元字面常數與字串字面常數。
1.整數字面常數:可以10進位、8進位、16進位表示之,不影響其值 的位元內容,例如20可以用三種表示方式:
20 //十進位
024 //八進位
0x14 //16進位
整數字面常數之前如果加上0代表八進位表示法;加上0x代表16進位表示法。
預設情況下,整數字面常數被視為「帶正負號的int型別」;整數字面常數亦可表示成long型別,只須在數值之後加上L或l,通常大家只用大寫的L,因為小寫l容易與1混淆。同理,如果整數字元字面常數後面加上u或U,便是代表無正負號型別,例如:128u、1024UL、8Lu。
2.浮點數字元字面常數:可以用科學記號表示亦可以一般10進位表示。如果是科學記號,冪指數部份可寫為E或e。
預設情況下,浮點數被視為double型別。如果浮點數字面常數欲表示成float型別,可在數值後加上F或f表示之。同理擴充精度可以在數值尾加上L或l表示。注意F、f、L、l只能附加於用十進位表示法的數值,例如:3.14159、0.1f、12.345L,3e1,1.0E-3、2. 。
3. bool字面常數: true 或 false。
4. 字元字面常數: 如果以單引號包圍某個字元,即可獲得一個可顯示的字元字面常數,例如:'a '、'2'。
如果想表示不可顯示的字元(控制字元)、單引號、雙引號以及倒斜線等等,可以用下列所謂的escape sequences表示(escape sequences是以一個倒斜線開始):
new line 'n' \ 新行
herizontal tab 't' \水平定位一個tab
vertical tab 'v' \垂直定位一個tab
backspace 'b' \退回一格
carriage return 'r' \回返
formfeed 'f' \ 換頁
alert(bell) 'a' \嗶聲
single quote ''' \ 顯示單引號
double quote '"' \顯示雙引號
escape sequence的一般格式: xxx
其中xxx代表一個序列,最多有三個8進位值,這些8進位值表現出某字元在電腦字元集中所對應的數值。例如:
'7' \bell、對應的字元字面常數為'a'
'12' \新行、對應的字元字面常數為'n'
'62' \對應的字元字面常數為'2'
此外字元字面常數預設為char型別,亦可表示成wchar_t型別,只要用L作為前導符號即可,例如 L'a',此稱為寬字元字面常數。
5、字串字面常數:0個以上的字元組成,封裝於雙引號內,其中可包含不可顯示字元(控制字元)。字串其實就是字元字面常數陣列,其中包含一串字元字面常數及一個做為結束符號的NULL字元。NULL字元是compiler為我們加上去的。例如:'A',表示單一字元字面常數(A字元);"A",表示一個A字元加上一個NULL字元。NULL字元是C與C++用來表示字串結束的一個標記符號。
寬字串,也是以L做為字串的前導詞:
L"a wide string literal"
如果程式中有二個字串或寬字串彼此鄰近,就會被連鎖在一起,最後在加上NULL字元做為結束符號,例如:
"two" "three" == "twothree"
但如果企圖將一個一般字串和寬字串連結在一起,其結果C++未定義,所以應避免此種用法:
"two" L"three" == ??
http://blog.xuite.net/mmkider/world/4525109-C%2B%2B%E5%AD%97%E9%9D%A2%E5%B8%B8%E6%95%B8
- Apr 20 Thu 2017 12:15
C++字面常數應用
close
全站熱搜
留言列表
禁止留言