天天看點

有章法的學習c++(6)字面值常量

在前面的初識輸入輸出中,曾經提到一個概念叫做字元串字面值常量。

形如"enter two numbers:"的值被稱為字面會常量,這樣的值一望而知。

每個字面值常量對應一種資料類型,字面值常量的形式和值決定了它的資料類型。

整形和浮點型字面值

我們可以将整形字面值寫作十進制、十六進制、八進制數的形式。

以0開頭的整數代表八進制數,以0x或者0X開頭的數代表十六進制數。

看例子:

#include<iostream>
using namespace std;
int main()
{
	int a = 20,b = 024,c = 0x14;
	cout << "a:" << a << endl;
	cout << "b:" << b << endl;
	cout << "c:" << c << endl;
	return 0;
}
           

分别輸入三種不同進制的整形數,最後所得出書都是一樣的都是十進制的20。

運作結果如下:

有章法的學習c++(6)字面值常量

預設十進制數是無符号的,八進制和十六進制是有符号的。

一個十進制字面值常量的類型,是int、long、long long中可容納目前字面值常量的尺寸最小的那個。

而一個八進制和十六進制字面值常量的類型,是int、long、long long、unsigned int、unsigned long、unsigned long long中可容納目前字面值常量的尺寸最小的那個。

字元和字元串字面值

單引号括起來的一個字元是字元型字面值,雙引号括起來的是字元串字面值。

字元串字面值的類型實際是由常量字元構成的數組,編譯器在每個字元串結尾處添加一個空字元'\0'(空字元和空格是完全不同的兩樣字元,空格類似于abc是可列印的,而空字

符意味着字元串的結束)。

看例子:

#include<iostream>
using namespace std;
int main()
{
	cout << "hello" << ".length=" << strlen("hello") << endl;
	cout << "hello" << ".size=" << sizeof("hello") << endl;
	return 0;
}
           

strlen求出的是字元産字面值的字元長度。

size求出的是字元串字面值所占的記憶體。

運作結果如下圖:

有章法的學習c++(6)字面值常量

在計算長度的時候,字元串字面值最後的空字元是不算入長度的,是以長度為5。

在計算所占記憶體大小的時候,空字元是占用了一個字元的記憶體,是以其大小是6。

轉義序列

有兩類字元是程式員無法使用的,一類是不可視的字元,如:倒退等。另一類是有特殊含義的字元,如:單引号,雙引号等。

c++語言定義的轉移語言包括:

換行符 \n

橫向制表符 \t

報警符 \a

縱向制表 \v

倒退符 \b

雙引号 \"

單引号 \'

問号 \?

反斜杠 \\

回車符 \r

進紙符 \f

因為對倒退符的概念不是很清楚,對換行符和回車符的概念也不是很清楚,是以寫了一個簡單的例子。

看例子:

#include<iostream>
using namespace std;
int main()
{
	cout << "123456\b\b\b777" << endl;
	cout << "123456\b\b\b77" << endl;
	cout << "123456\b\b\b7" << endl;
	cout << "雙引号\"換行符\n回車符\r進紙符\f" << endl;
	cout << "回車符\r" << endl;
	return 0;
}
           

在實際的運算中,每一個倒退符以為着光标向前移動一次。

如果換行符後面還有字元的話則後面的字元會把倒退後光标後面的字元覆寫掉。

回車符的作用是把光标移動到本行的首位,如果回車符後面有字元,則會覆寫掉首位後面的字元。

換行符的意義就是單純的換到下一行。

我們也可以使用泛化的轉義字元

其形式是\+加八進制數或者\x+十六進制數

提供一些示例:

\7(響鈴) \12(換行符) \40(空格)

\0(空字元) \115(M) |x4d(字元M)

如果使用的是asc碼字元集,則将反斜杠後面的值換算成相應的十進制,然後可以對照asc碼表就可以知道其代表的值了。

做了一個簡單的例子,看代碼:

#include<iostream>
using namespace std;
int main()
{
	cout << "Hi \x4dO\115!\n" << endl;
	return 0;
}
           

結果如下圖:

有章法的學習c++(6)字面值常量

指定字面值的類型

通過添加如下表中的字首或者字尾,可以改變整形、浮點型和字元型字面值常量的預設類型。

字元和字元串字面值

字首 含義 類型

u Unicode16 cahr16_t

U Unicode32 cahr32_t

L 寬字元 wchar_t

u8 UTF_8(僅用于字元串字面值常量) cahr

整形

字尾 最小比對類型類型

u或U unsigned

l或L long

ll或LL long long

浮點型 類型

f或F float

l或L long Double

看例子:

L'a' 寬字元類型字面值

u8"hi!" utf-8字元串字面值

42ull 整形字面值 unsigned long long類型

1E-3F 浮點型字面值,float類型

3.14159L 浮點型字面值,long double類型