我们都知道,C++中包含了多种数据类型
数据类型 | 占用字节数 | 中文名称 | 注释 |
---|---|---|---|
char |
1 | 字符型 | 存储单个字符,通常为8位。 |
signed char |
1 | 有符号字符型 | 字符型的有符号版本,可用于表示-128至127之间的整数。 |
unsigned char |
1 | 无符号字符型 | 字符型的无符号版本,可用于表示0至255之间的整数。 |
short |
2 | 短整型 | 较小的整数类型,通常为16位。 |
unsigned short |
2 | 无符号短整型 | 短整型的无符号版本,用于表示非负整数。 |
int |
4 | 整型 | 通用的整数类型,通常为32位。 |
unsigned int |
4 | 无符号整型 | 整型的无符号版本,用于表示非负整数。 |
long |
4 or 8 | 长整型 | 较大的整数类型,通常为32位或64位,取决于系统。 |
unsigned long |
4 or 8 | 无符号长整型 | 长整型的无符号版本,用于表示非负整数。 |
long long |
8 | 扩展长整型 | 非常大的整数类型,通常为64位。 |
unsigned long long |
8 | 无符号扩展长整型 | 扩展长整型的无符号版本,用于表示非负整数。 |
float |
4 | 浮点型 | 单精度浮点数,用于表示实数,精度较低。 |
double |
8 | 双精度浮点型 | 双精度浮点数,用于表示实数,精度高于float 。 |
long double |
8 or 16 | 扩展双精度浮点型 | 更高的精度浮点数,精度高于double ,具体大小取决于系统。 |
bool |
1 | 布尔型 | 逻辑值,通常为0(假)或1(真)。 |
wchar_t |
2 or 4 | 宽字符型 | 用于存储宽字符,大小通常为16位或32位,取决于系统。 |
那我们知道C++为啥要定义这么多种类型么?让我们用小朋友都能看明白的方法来理解一下:
想象一下,你的玩具箱里有不同大小的盒子,有的盒子很小,只能放一个小型的玩具,有的盒子很大,可以装下好多好多的玩具。这些盒子就像电脑里的不同数据类型。
当你玩玩具时,如果你只需要用到一个小的玩具或者零件,你会选择哪个盒子呢?当然是那个最小的盒子啦,因为它刚好够用,而且不会浪费空间。同样的道理,当我们用电脑写程序的时候,如果我们只需要记录一些简单的东西,比如一个字母或者一个小数字,我们就用 char
这种小盒子,因为它只占一点点地方,不会浪费电脑的存储空间。
但是,如果我们要记录一个很大的数字,比如你的工资加上一百万(祝所有看到这里的大家都能工资加100万),那就要用到 int
或者 long int
这些大一点的盒子了,因为它们能装得下更多的积木------也就是更多的数字。
还有,如果你要做一些超级精确的数学题,比如计算圆周率,那你就需要用到 float
或者 double
这样的超级大盒子,因为它们可以装下很多很多的小数点后面的数字,这样就不会让我们的计算出错。
所以,电脑之所以有这么多不同大小的盒子,也就是不同的数据类型,是因为这样可以让我们的程序变得更聪明,更节省空间,也更快速。就像是在你的玩具箱里,每个玩具都有它的专属盒子一样,每个数据也有最适合它的数据类型。
而且,电脑在处理这些不同大小的盒子时,用的方法也不一样。处理小盒子就像拿起一块积木那么简单,但是处理大盒子可能就需要多花点时间和力气了。所以,用对盒子很重要,这样我们的程序才能跑得又快又好!
编码解读
在计算机中,我们可以利用方法来获取变量的数据类型大小:
cpp
#include <iostream>
int main()
{
printf("%ld, %ld, %ld, %ld, %ld, %ld, %ld, %ld",
sizeof(char),
sizeof(bool),
sizeof(short int),
sizeof(int),
sizeof(long),
sizeof(long long),
sizeof(float),
sizeof(double));
return 0;
}
可以清楚的看到,针对不同类型,返回会有不同的长度。不同的机器在c++这里显示可能有所差异,和系统本身有关系,但这不是重点。
我们理解不同的数据类型占用的空间不同就可以了。
通过这个函数,我们也可以传入变量,来返回变量所占用的数据长度。
cpp
#include<iostream>
using namespace std;
int main()
{
int a;
short b;
cout<<sizeof(a)<<""<<sizeof(b);
return 0;
}
这个技巧非常的有用。
-
内存管理:
当你需要为动态分配的内存指定大小时,
sizeof
可以帮助你确定所需的空间量。例如,使用new
分配内存时,sizeof
可以确保你分配足够的内存。 -
数组操作:
你可以使用
sizeof
来确定数组的大小。由于数组名在大多数上下文中会退化为指向其第一个元素的指针,因此通过结合使用sizeof
和数组名,你可以计算出数组中元素的数量。 -
文件读写:
在进行文件读写时,
sizeof
可以帮助你确定一次读取或写入多少字节,这对于二进制文件尤其重要。 -
网络通信:
在网络编程中,发送和接收数据包时,
sizeof
可以帮助你确定缓冲区的大小,确保数据的完整传输。 -
类型检查和调试:
sizeof
可以用来检查数据类型的大小是否符合预期,这对于跨平台编程特别有用,因为不同架构下的数据类型大小可能不同。 -
性能优化:
知道数据类型的确切大小可以帮助你优化数据布局和访问模式,减少缓存未命中,提升程序性能。
-
字节对齐:
sizeof
可以帮助理解数据类型的对齐要求,这对于编写低级代码和直接操作硬件时非常重要。 -
函数参数和返回类型:
可能需要传递数据类型大小作为函数参数,或者作为函数返回值的一部分。