C++ Primer 笔记二 基本内置类型

    计算机以比特序列存储数据,可寻址的最小内存块称位“字节(byte)”,存储的基本单元称为”字(word)“。
    类型决定了数据所占的比特数以及该如何解释这些比特的内容,规定了其对象的存储要求和所能执行的操作。类型分为常量和非常量。

    C++算术类型(arithmetic type)的尺寸在不同的机器上有所差别,C++标准只规定了这些算术类型的尺寸的最小值,并规定:一个int至少和一个short一样大,一个long至少和一个int一样大,一个long long至少和一个long一样大。

类型 含义 最小尺寸
bool 布尔类型 未定义
char 字符 8位
wchar_t 宽字符 16位
char16_t Unicode字符 16位
char32_t Unicode字符 32位
short 短整型 16位
int 整型 16位
long 长整型 32位
long long 长整型(C++11) 64位
float 单精度浮点数 6位有效数字
double 双精度浮点数 10位有效数字
long double 扩展精度浮点数 10位有效数字

    带符号类型和无符号类型:带符号类型(signed)可表示正数、负数和0,约定在其表示范围内正值和负值量应该平衡;无符号类型(unsigned)仅能表示大于等于0的值。
    intshortlonglong long都是带符号的,对应无符号类型位unsigned intunsigned shortunsigned longunsigned long long
字符型分charsigned charunsigned char三种。但是表现形式只有两种signedunsigned,由编译器来决定。

大多数类型支持类型转换,即一种类型的值转变为另外一种类型值:

  • 非bool型转bool类型时,初始值为0则结果为false,否则为true;
  • bool类型转非bool类型,初始值为false则结果为0,否则为1;
bool b = 42;	// b为真
int i = b;		// i = 1
  • 浮点数赋值给整数类型,结果仅保留浮点数中小数点之前的部分;
  • 整数值赋值给浮点类型时,小数部分记为0(如果整数所占空间超过浮点类型的容量有可能损失精度);
int i = 3.14;	// i = 3
double d = i;	// d = 3.0
  • 赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数;
  • 赋给带符号类型一个超出它表示范围的值时,结果是未定义的。
unsigned char c = -1;	// 假设char占8比特, c = 255
signed char c2 = 256;	// 假设char占8比特,c的值是未定义的

    字面值常量(literal)也有其对应的数据类型,由字面值常量的形式和值决定。整型字面值有十进制、八进制和十六进制三种形式,比如数值20:

20		// 十进制
024		// 以0开头的的整数代表八进制
0x14	// 以0x或0X开头代表十六进制
符号 类型
十进制 signed intlonglong long中能容下当前值的尺寸最小者
八进制 singed或者unsigned intunsigned intlongunsigned longlong longunsigned long long中能容下当前值的尺寸最小者
十六进制 singed或者unsigned intunsigned intlongunsigned longlong longunsigned long long中能容下当前值的尺寸最小者

严格来说,十进制字面值不会是负数,形如-42,负号表示对字面值取负值。类型short没有对应的字面值。
    浮点型字面值有小数表示和科学计数法表示两种形式:

3.14159 	// 小数表示
3.14159E0	// 科学计数法表示
3.14159e0	// 科学计数法表示

    单引号括起来的一个字符成为char型字面值,双引号括起来的字符称为字符串型字面值

'a'	// 字符字面值
"a"	// 字符串型字面值
""	// 字符串型字面值

    字符串型字面值的类型实际上是由常量字符构成的数组,编译器在每个字符串结尾处添加一个空字符('\0'),字符串型字面值的长度比它的内光荣多1,如:

“Hello,World!"

实际存储的内容为:

H e l l o , W o r l d ! \0

    可以通过给字面值添加前缀或者后缀改变字面值的默认类型

字符和字符串字面值 前缀 含义 类型
u Unicode 16字符 char16_t
U Unicode32字符 char32_t
L 宽字符 wchar_t
u8 UTF-8(仅用于字符串字面值常量) char
整型字面值 后缀 最小匹配类型
u or U unsigned
l or L long
ll or LL long long
浮点型字面值 后缀 类型
f或F float
l或L long double

    C++中有两类字符不能直接使用:不可打印字符和有特殊含义的字符。使用时需要用转义序列代替。转义已反斜线开头,后紧跟一个字符,或者不多于3个八进制数,或者字母x加上1个十六进制数。

字符 转移序列 字符 转移序列 字符 转移序列
换行符 \n 回车符 \r 报警(响铃符) \a
纵向制表符 \v 横向制表符 \t 双引号 \"
反斜线 \\ 退格符 \b 单引号 \’
问号 \? 进纸符 \f

    布尔字面值有两个:truefalse
    指针指面值nullptr,可用来初始化一个空指针。

猜你喜欢

转载自blog.csdn.net/wenrui7868/article/details/86488980
今日推荐