主要内容
在今天的大师码课程中,我们来介绍一下内存大小的衡量单位。
1. 数据的单位
1.1 单位
计算机世界的数据大小,也和物理世界的长度一样,有自己的单位。
数据的最小单位是“位”(Bit),也就是一个 bool 变量所占的空间。
不过,由于“位”(Bit)太小,在使用上,我们习惯用另一个单位“字节”(Byte,简称 B),作为最小单位。
1 Byte = 8 Bits
1 字节 = 8 位
上一节课,我们计算了一个 int 的大小,是 bool 的 32 倍。
所以,一个 int 的大小是 4 字节。
除此以外,还有如下的常用单位:
1 KB = 1024 B // 下载速度,一般为:几百 KB/s
1 MB = 1024 KB // 一首歌曲的大小,一般为:几十 MB
1 GB = 1024 MB // 一部电影的大小,一般为:几 GB
1 TB = 1024 GB // 一些电脑的硬盘总容量为:几 TB
1.2 单位换算
在上面的描述中,需要特别注意的是单位间的比例,
是 1024。
这里的 1024,是 2^10 。这也是和二进制有关。
2. 常见数据类型的长度(Win32为例)
在不同的操作系统下,数据类型的长度会有差异。这里以 32 bit 的操作系统为例说明:
1 整型
| 类型名称 |
short |
int |
long |
long long |
unsigned short |
unsigned int |
unsigned long |
unsigned long long |
| 所占字节数 |
2 Bytes |
4 Bytes |
4 Bytes |
8 Bytes |
2 Bytes |
4 Bytes |
4 Bytes |
8 Bytes |
| 表示范围 |
-32768~32767 |
-2147483648~
2147483647 |
-2147483648~
2147483647 |
-9223372036854775808~
9223372036854775807 |
0~65535 |
0~
4294967295 |
0~
4294967295 |
0~
18446744073709551615 |
| 表示范围(十六进制) |
0x0000~0xFFFF |
0x00000000~
0xFFFFFFFF |
0x00000000~
0xFFFFFFFF |
0x0000000000000000~
0xFFFFFFFFFFFFFFFF |
0x0000~0xFFFF |
0x00000000~
0xFFFFFFFF |
0x00000000~
0xFFFFFFFF |
0x0000000000000000~
0xFFFFFFFFFFFFFFFF |
- 十六进制的两位,占据 1 Byte;
- 只有 unsigned 类型,十六进制的表示范围,和十进制的表示范围,是一一对应的;
2 实型
| 类型名称 |
float(中文翻译:单精度) |
double(中文翻译:双精度) |
long double |
bool |
| 所占字节数 |
4 Bytes |
8 Bytes |
16 Bytes |
* 1(=8 Bits) Byte,见说明 |
| 表示范围 |
-3.4E+38~3.4E+38 |
-1.7E+308~1.7E+308 |
-3.4E4932~3.4E4932 |
true / false |
| 表示范围(十六进制) |
0x00000000~
0xFFFFFFFF |
0x0000000000000000~
0xFFFFFFFFFFFFFFFF |
0x0~
0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF |
在C++中,bool 其实也是占一个字节(8 位)。这是比较特殊的地方。
3 字符型
* 字符型还未介绍,将在后续章节讲解。
| 类型名称 |
char |
unsigned char |
| 所占字节数 |
1 Byte |
1 Byte |
| 表示范围 |
-128~127 |
0~255 |
| 表示范围(十六进制) |
0x00~
0xFF |
0x00~
0xFF |
由于,在不同机器上,数据的长度会有不同。所以,C++ 给了一个方法,用于查询变量(或者类型)的长度,单位“字节 Bytes”。
cout << sizeof(int) << " Bytes" << endl;
cout << sizeof(float) << " Bytes" << endl;
cout << sizeof(double) << " Bytes" << endl;
cout << sizeof(short) << " Bytes" << endl;
cout << sizeof(unsigned int) << " Bytes" << endl;
int dashima(5);
cout << sizeof(dashima) << " Bytes" << endl;
习题
课后练习