- C++基本内置类型有:算术类型和空类型(void),空类型不对应具体的值
- 下表列出了C++标准规定的尺寸最小值(所谓的尺寸就是该类型所占的比特数),同时允许编译器赋予这些类型更大的尺寸。所占的比特数不同,它所能表示的数据范围也不一样
- 如何选择数据类型:
1.当明知道数值不可能为负的时候,选择无符号类型
2.一般选用int类型,如果超出范围用long long
3.在算术表达式中不要使用char或则bool,只有在存放字符或则布尔值时才能使用它们。因为在一个机器上char时有符号,在另外一个机器上它是无符号的。所以最好指定signed char和unsigned char
4.double和float的计算代价差不多,有时double甚至比float还快,因此尽量使用double。
- 除布尔型外:
字符型被分为:char,signed char,unsigned char三种类型,需要注意的是char类型和signed char类型不同。尽管字符型有三种,但是表现形式却只有两种:有符号和无符号的。类型char实际上会表现为上述两种形式中的一种,具体哪种由编译器决定。
其他整型被分为unsigned,signed两种,类型int,short,long,long long都是带符号的。
unsigned那条说明:当我们赋给无符号类型一个超出它表示范围的值时,结果是初始值对无符号类型表示数值总数取模后的余数(取模后对结果的差值)(原数(256)对求余结果的差值(无符号的字符型区间位[0,255]),-1(真值)--->1000 0001(二进制)--->256(形式值)
signed那条说明:当我们赋值给带符号类型一个超出它表示范围的值时结果时未定义的,此时,程序可能继续工作,可能崩溃,可能产生垃圾数据。
注意强制类型转换后的结果由等号右边的变量所决定。
1 i=3; 2 double pi=i;//pi的值为3.0
- 当算术运算中既有无符号数又有有符号数时,有符号数会转换成无符号数
- 当无符号数减去一个值,无论这个值是不是无符号数,如果结果是负数
以上两点总结起来就是无符号数和有符号数进行算术运算时,有符号数应变成无符号数;无符号数参与的算术运算结果应是无符号数,如果结果是有符号数应变成无符号数。虽然这样但是切勿让有符号类型和无符号类型混用。
- for循环的循环变量应是有符号数,否则会导致死循环。
- 字面值常量是指该常量的值一望而知。十进制的字面值常量是带符号数,十进制字面值的类型是int,long,long long中能容纳该数值的尺寸最小的那个;八进制和十六进制的字面值常量可以是带符号数也可以是无符号数类型是int,long,long long,unsigned int,unsigned long,unsigned long long中能容纳该数值的尺寸最小的那个;如果一个字面值连与之关联的最大数据类型都放不下,将产生错误。类型short没有字面值。
- 默认浮点型字面值应该是double类型的
- 字符串实际上是字符构成的数组,'A'实际上就是单独的A,"A"实际上代表了一个字符数组,里面包含了一个A和一个\0。
- 泛化的转义字符形式是\x后面紧跟一个或则多个十六进制数字,或则\后面跟着一个或多个8进制数字