主要内容
1. 不同数据类型的长度(以 32 位操作系统为例)
1.1 各个数据类型长度一览
- 1 Byte: char, unsigned char(还没有介绍)
- 2 Bytes: short, unsigned short
- 4 Bytes: int, unsigned int, long, unsigned long, float
- 8 Bytes: long long, unsigned long long, double
1.2 有符号/无符号的差别
unsigned short
short

这里的第一位,是定位为
“符号位”。
这里为 0 ,则表示
非负数(没有符号);
这里为 1 ,则表示负数(有符号);
2. 隐式(自动)类型转化
看了不同数据类型的长度后,我们回过头来思考这样的一个问题:
2.1 规则一
以下表达式的计算结果是什么?
short dashima_s = 1;
int dashima_i = 1;
____ dashima_r1 = s + i;
float dashima_f = 0.1;
double dashima_d = 3.14;
____ dashima_r2 = f + d;
____ dashima_r3 = i + d;
像这样的问题,涉及到的是 C++ 中数据类型的互相转化的规则。
C++ 中,包含了一些自动转化的规则,详述如下:
上面的计算结果是
short dashima_s = 1;
int dashima_i = 1;
_int_ dashima_r1 = s + i; // 这里应该填 int。因为 int 占 4 字节,short 占 2 字节。
float dashima_f = 0.1;
double dashima_d = 3.14;
_double_ dashima_r2 = f + d; // 这里应该填 double。因为 float 占 4 字节,double 占 8 字节。
_double_ dashima_r3 = i + d; // 这里应该填 double。因为 int 占 4 字节,double 占 8 字节。
2.2 规则二
再请看:
int dashima_i = 1;
unsigned int dashima_ui = 1;
____ dashima_r = i + ui;
上面的计算结果是
int dashima_i = 1;
unsigned int dashima_ui = 1;
_unsigned int_ dashima_r = i + ui; // 这里应该填 unsigned int。有符号转化为无符号
2.3 规则三
再请看:
int dashima_i = 1;
float dashima_f = 0.1;
____ dashima_r3 = i + f;
上面的计算结果是
int dashima_i = 1;
float dashima_f = 0.1;
_float_ dashima_r3 = i + f; // 这里应该填 float。因为 int 占 4 字节,float 占 4 字节。
3. 隐式类型转化 - 小结
隐式类型转换方向:
bool -> char -> unsigned char -> short -> unsigned short -> int-> unsigned int ->
long-> unsigned long -> float -> double -> long double
习题
课后练习