基本型別包括算術型別 (arithmetic type) 和空型別 (void)
算術型別分為兩類:整型(integral type, 包括字元和布林型別)和浮點型。
基本字元型別是char
,乙個char
的空間應確保可以存放機器基本字符集中的任意字元對應的數字值。
wchar_t
型別用於確保可以存放機器最大擴充套件字符集中的任意乙個字元,型別char16_t
和char32_t
為 unicode 字符集服務。
浮點型可表示單精度、雙精度和擴充套件精度值。c++ 標準指定了乙個浮點數有效位數的最小值。
帶符號型別和無符號型別
除布林型和擴充套件字元型之外,其他整型可以劃分為帶符號(signed)和無符號(unsigned).
型別char
和型別unsigned char
並不一樣,型別char
的表現形式具體由編譯器決定.
如何選擇型別
當在程式的某處我們使用了一種型別而其實物件應該取另一種型別時,程式會自動進行型別轉換。
型別所能表示的值的範圍決定了轉換的過程:
取模運算和取餘運算
含有無符號型別的表示式
當乙個算術表示式中既有無符號數又有int
值時,那個int
值就會轉換成無符號數。
如果表示式裡既有帶符號型別又有無符號型別,當帶符號型別取值為負時會出現異常結果,因為帶符號數會自動地轉換成無符號數。
每個字面值常量都對應一種資料型別,字面值常量的形式和值決定了它的資料型別。
整型和浮點型字面值
以 0 開頭的整數代表八進位制數,以 0x 或 0x 開頭的代表十六進製制數。例如:
20/*十進位制*/ 024/*八進位制*/ 0x14/*十六進製制*/
浮點型字面值表現為乙個小數或以科學計數法表示的指數,其中指數部分用 e 或 e 標識:
3.14159 3.14159e0 0. 0e0 .001
預設的浮點型字面值是乙個double
字元和字串字面值
由單引號括起來的乙個字元稱為char
型字面值,如'a'
。
雙引號括起來的零個或多個字元構成字串型字面值,如"hello world!"
。
字串字面值的型別實際上是由常量字元構成陣列,編譯器在每個字串的結尾處新增乙個空字元(』\0』)。
如果兩個字串字面值位置緊鄰且僅由空格、縮排和換行符分隔,則它們實際上是乙個整體。
轉義序列 (escape sequence)
有兩類字元不能直接使用,使用轉義序列進行使用:
轉義序列均以反斜線作為開始,c++ 中轉義序列如下圖:
也可以使用泛化的轉義序列,其形式是\x
後緊跟 1 個或多個十六進製制數字,
或者\
後緊跟 1 個、2 個或 3 個八進位制數字,其中數字部分表示的是字元對應的數值,以下是示例:
\7 (響鈴) \12 (換行符) \40 (空格) \0 (空字元) \115 (字元m) \x4d (字元m)
如果\
後面跟著的八進位制數字超過 3 個,只有前 3 個數字與\
構成轉義序列,\x
會用到後面跟著的所有數字
指定字面值的型別
通過新增下圖所列出的字首和字尾,可以改變整型、浮點型和字元型字面值的預設型別。
程式示例如下:
l'a'
// 寬字元型字面值,型別是 wchar_t
u8"hi!"
// utf-8 字串字面值
42ull
// 無符號整型字面值,型別是 unsigned long long
1e-3f
// 單精度浮點型字面值,型別是 float
3.14159l
// 擴充套件精度浮點型字面值,型別是 long double
布林字面值和指標字面值true
和false
是布林型別的字面值,nullptr
是指標字面值 第二章 變數和基本型別
第二章 變數和基本型別 1 基本內建型別 1 有效數字 float 6位 double 10位 2 符號位 使用一位符號位的表示方式的8位signed整型取值是 128到127 3 越界賦值 取值數目求模 2 字面值常量 1 無符號長整型 1024ul 2 字串 自動在末尾新增乙個空字元 3 變數 ...
第二章 變數和基本型別
識別符號 運算子 宣告符 2.3 復合型別 基於其他型別定義的型別 1.引用 定義引用時,程式把引用和它的初始值繫結 bind 在一起,而不是將初始值拷貝給引用。一旦初始化完成,引用將和他的初始值一直繫結在一起,所以無法令引用重新繫結到另外乙個物件,所以引用必須初始化 2.指標 指標本身是乙個物件,...
第二章 變數和基本型別
切勿混用帶符號數和無符號數 include using namespace std int main 輸出的結果一直都是no,所以不可混用,請注意size 返回的是size type型別,而該型別也是unsigned的。只有內建型別存在字面值,字面值常量的值是不能修改的 它存放在 段中 內建型別的全...