整型
宽度
- 宽度(width)用于描述存储整数时使用的内存量。
- 字节(byte)通常指的是8位的内存单元。
- 可以通过sizeof判断类型所占的字节数。
创建符号常量
- 使用预处理器编译指令,在编译时查找文件中对应的变量将其替换为数字。
#define INT_MAX 32767
- C++中更好的创建符号常量的方法是使用const。
初始化
- C++ 11提供另一种初始化方法,大括号中不包含任何东西时将被初始化为0
int wrens(32); int wrens = {24}; int wrens {24};
无符号类型
- 对于有符号整型,如果超越了限制,其值将为范围另一端的取值。
整型类型的选择
- 一般选择在范围内的所占内存最小的类型
- 仅当有大型整型数组时,才有必要使用short
整型字面值
- 如果第一位是1~9,则基数为10(十进制 DEC)
- 如果第一位是0,第二位为1~7,则基数为8(八进制 OCT)
- 如果前两位是0x或者0X,则基数为16(十六进制 HEX)
使用cout进行不同进制输出时
int num = 42;
cout << hex;
cout << num <<endl; //以十六进制输出
- 控制符hex实际是一条消息,告诉cout采用何种行为。
C++ 确定整型类型
- 使用后缀表达特定类型
- u或U表示unsigned int
- ul表示unsigned long
- L表示long
- LL表示long long
- 值太大不能存储为int
转义字符
- 程序使用推个字符会将光标退到上一次输入的位置
其他
- 以两个下划线或下划线和大写字母打头的名称保留给编译器使用。以一个下划线开头的名称用作全局标识符。
- ‘A’的ASCII码为65
- ‘a’的ASCII码为97
const限定符
const相比于宏定义的好处
- 能够明确指定类型
- 可以使用C++的作用域规则将定以限制在特定的作用域中
- 可以将const用于更复杂的类型
- 在C++中还可以使用const值来声明数组的长度
浮点数
- float通常为32位,double通常为64位
- 默认定义的浮点常量属于double类型,如果希望常量为float类型,使用f或F后缀。
- 对于float,C++只保证6位有效位。
算术运算符
- 对于求模运算符,两个操作数必须都是整型,将该运算符用于浮点数将导致编译错误。
- 当两个运算符的优先级相同时,C++将看操作数的结合性是从左到右还是从右到左。
数值转换
- 整型提升:在计算表达式时,C++会将bool、char、unsigned char、signed char和short转为int,计算机使用这种类型时,运算速度最快
- 强制类型转换:强制类型转换不会修改变量本身,而是创建一个新的、指定类型的值
(typeName) value //C语言中的转换 typeName (value) //C++中的转换
auto声明
- 显示声明变量时,使用auto的帮助并不大,反而会导致自动推断类型产生一些错误
- 在处理复杂类型时,使用自动类型推断可以减少代码量。
```
std::vector
scores; std::vector ::iterator pv = scores.begin(); //C++ 98
std::vector
# 问题
- 为什么C++有多种整型?
> 可以根据需要选择适当的类型。可以使用不同的类型来提高计算速度。
- C++提供了什么措施来防止超出整型的范围?
> C++没有提供自动防止超出整型限制的功能,可以使用头文件climits来确定限制情况。
- 下面两条语句是否等价?
char grade = 65; char grade = ‘A’;
> 在使用ASCII码的系统上,他们是等价的。第二条语句还可用于其他编码的系统。65是一个int常量,而'A'是一个char常量。
- 找出编码88表示的字符
char c = 88; cout « c « endl;
cout.put(char(88));
cout « char(88) « endl;
cout « (char)88 « endl; ```
- 将long值赋给float变量会导致舍入误差,将long值赋给double变量呢?将long long赋给double变量呢?
取决于两个类型的长度。如果long为4个字节,则没有损失。因为最大的long值为20亿,即有10位数。由于double提供了至少13位有效数字,因而不需要进行任何舍入。long long 类型可提供19位有效数字,超过了double保证的13位有效数字的精度。