在前面的初識輸入輸出中,曾經提到乙個概念叫做字串字面值常量。
形如"enter two numbers:"的值被稱為字面會常量,這樣的值一望而知。
每個字面值常量對應一種資料型別,字面值常量的形式和值決定了它的資料型別。
整形和浮點型字面值
我們可以將整形字面值寫作十進位制、十六進製制、八進位制數的形式。
以0開頭的整數代表八進位制數,以0x或者0x開頭的數代表十六進製制數。
看例子:
#includeusing namespace std;
int main()
分別輸入三種不同進製的整形數,最後所得出書都是一樣的都是十進位制的20。
執行結果如下:
預設十進位制數是無符號的,八進位制和十六進製制是有符號的。
乙個十進位製字面值常量的型別,是int、long、long long中可容納當前字面值常量的尺寸最小的那個。
而乙個八進位制和十六進製製字面值常量的型別,是int、long、long long、unsigned int、unsigned long、unsigned long long中可容納當前字面值常量的尺寸最小的那個。
字元和字串字面值
單引號括起來的乙個字元是字元型字面值,雙引號括起來的是字串字面值。
字串字面值的型別實際是由常量字元構成的陣列,編譯器在每個字串結尾處新增乙個空字元'\0'(空字元和空格是完全不同的兩樣字元,空格類似於abc是可列印的,而空字
符意味著字串的結束)。
看例子:
#includeusing namespace std;
int main()
strlen求出的是字元產字面值的字元長度。
size求出的是字串字面值所佔的記憶體。
執行結果如下圖:
在計算長度的時候,字串字面值最後的空字元是不算入長度的,所以長度為5。
在計算所佔記憶體大小的時候,空字元是占用了乙個字元的記憶體,所以其大小是6。
轉義序列
有兩類字元是程式設計師無法使用的,一類是不可視的字元,如:退格等。另一類是有特殊含義的字元,如:單引號,雙引號等。
c++語言定義的轉移語言包括:
換行符\n
橫向製表符\t
報警符\a
縱向製表\v
退格符\b
雙引號\"
單引號\'
問號\?
反斜槓\\
回車符\r
進紙符\f
因為對退格符的概念不是很清楚,對換行符和回車符的概念也不是很清楚,所以寫了乙個簡單的例子。
看例子:
#includeusing namespace std;
int main()
在實際的運算中,每乙個退格符以為著游標向前移動一次。
如果換行符後面還有字元的話則後面的字元會把退格後游標後面的字元覆蓋掉。
回車符的作用是把游標移動到本行的首位,如果回車符後面有字元,則會覆蓋掉首位後面的字元。
換行符的意義就是單純的換到下一行。
我們也可以使用泛化的轉義字元
其形式是\+加八進位制數或者\x+十六進製制數
提供一些示例:
\7(響鈴)
\12(換行符)
\40(空格)
\0(空字元)
\115(m)
|x4d(字元m)
如果使用的是asc碼字符集,則將反斜槓後面的值換算成相應的十進位制,然後可以對照asc碼表就可以知道其代表的值了。
做了乙個簡單的例子,看**:
#includeusing namespace std;
int main()
結果如下圖:
指定字面值的型別
通過新增如下表中的字首或者字尾,可以改變整形、浮點型和字元型字面值常量的預設型別。
字元和字串字面值
字首含義 型別
uunicode16cahr16_t
uunicode32cahr32_t
l寬字元 wchar_t
u8utf_8(僅用於字串字面值常量)cahr
整形字尾最小匹配型別型別
u或uunsigned
l或llong
ll或lllong long
浮點型型別
f或ffloat
l或llong double
看例子:
l'a'寬字元型別字面值
u8"hi!"utf-8字串字面值
42ull整形字面值 unsigned long long型別
1e-3f浮點型字面值,float型別
3.14159l浮點型字面值,long double型別
c 自定義型別的字面值常量
int i 888 編譯器會將數字888轉成乙個int物件,對於自定義的型別也可以這麼做 操作符 後面以下劃線開始的符號作為自定義型別字面值常量運算子。必須以下劃線開頭,非下劃線開頭的作為標準庫保留使用的,支援以下幾種引數的 operator identifier const char operat...
C語言浮點型字面值常量的書寫形式
浮點數字面量總是寫成10進製的形式。浮點數字面量必須有乙個小數點或乙個指數。如 1e10。浮點數字面值在預設情況下都是double型別的。ansi標準規定的浮點數所能容納的最小範圍是10e 37 10e37之間的任何值。ansi標準規定了long double至少和double一樣長,double至...
有章法的學習c 5 型別轉換(二)
猶豫了一下我又回來了,回到公司辦公室,坐了下來。決定繼續看看型別轉換。浪費時間毫無意義。無符號型別與整形 儘管我們不會給無符號型別賦乙個負值,卻可能寫出這麼做的 看例子 include using namespace std int main 在例子中,將乙個負值賦給了乙個無符號數。當我們將乙個超出...