[C/C++入门][变量和运算]9、数据类型以及占用存储空间大小

avatar
作者
猴君
阅读量:0

我们都知道,C++中包含了多种数据类型

数据类型占用字节数中文名称注释
char1字符型存储单个字符,通常为8位。
signed char1有符号字符型字符型的有符号版本,可用于表示-128至127之间的整数。
unsigned char1无符号字符型字符型的无符号版本,可用于表示0至255之间的整数。
short2短整型较小的整数类型,通常为16位。
unsigned short2无符号短整型短整型的无符号版本,用于表示非负整数。
int4整型通用的整数类型,通常为32位。
unsigned int4无符号整型整型的无符号版本,用于表示非负整数。
long4 or 8长整型较大的整数类型,通常为32位或64位,取决于系统。
unsigned long4 or 8无符号长整型长整型的无符号版本,用于表示非负整数。
long long8扩展长整型非常大的整数类型,通常为64位。
unsigned long long8无符号扩展长整型扩展长整型的无符号版本,用于表示非负整数。
float4浮点型单精度浮点数,用于表示实数,精度较低。
double8双精度浮点型双精度浮点数,用于表示实数,精度高于float
long double8 or 16扩展双精度浮点型更高的精度浮点数,精度高于double,具体大小取决于系统。
bool1布尔型逻辑值,通常为0(假)或1(真)。
wchar_t2 or 4宽字符型用于存储宽字符,大小通常为16位或32位,取决于系统。

那我们知道C++为啥要定义这么多种类型么?让我们用小朋友都能看明白的方法来理解一下:

想象一下,你的玩具箱里有不同大小的盒子,有的盒子很小,只能放一个小型的玩具,有的盒子很大,可以装下好多好多的玩具。这些盒子就像电脑里的不同数据类型。

当你玩玩具时,如果你只需要用到一个小的玩具或者零件,你会选择哪个盒子呢?当然是那个最小的盒子啦,因为它刚好够用,而且不会浪费空间。同样的道理,当我们用电脑写程序的时候,如果我们只需要记录一些简单的东西,比如一个字母或者一个小数字,我们就用 char 这种小盒子,因为它只占一点点地方,不会浪费电脑的存储空间。

但是,如果我们要记录一个很大的数字,比如你的工资加上一百万(祝所有看到这里的大家都能工资加100万),那就要用到 int 或者 long int 这些大一点的盒子了,因为它们能装得下更多的积木——也就是更多的数字。

还有,如果你要做一些超级精确的数学题,比如计算圆周率,那你就需要用到 float 或者 double 这样的超级大盒子,因为它们可以装下很多很多的小数点后面的数字,这样就不会让我们的计算出错。

所以,电脑之所以有这么多不同大小的盒子,也就是不同的数据类型,是因为这样可以让我们的程序变得更聪明,更节省空间,也更快速。就像是在你的玩具箱里,每个玩具都有它的专属盒子一样,每个数据也有最适合它的数据类型。

而且,电脑在处理这些不同大小的盒子时,用的方法也不一样。处理小盒子就像拿起一块积木那么简单,但是处理大盒子可能就需要多花点时间和力气了。所以,用对盒子很重要,这样我们的程序才能跑得又快又好!

编码解读

在计算机中,我们可以利用方法来获取变量的数据类型大小:

#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++这里显示可能有所差异,和系统本身有关系,但这不是重点。
我们理解不同的数据类型占用的空间不同就可以了。
通过这个函数,我们也可以传入变量,来返回变量所占用的数据长度。
 

#include<iostream> using namespace std; int main() { 	int a; 	short b; 	cout<<sizeof(a)<<""<<sizeof(b); 	return 0; }

这个技巧非常的有用。

  1. 内存管理

    当你需要为动态分配的内存指定大小时,sizeof 可以帮助你确定所需的空间量。例如,使用new 分配内存时,sizeof 可以确保你分配足够的内存。
  2. 数组操作

    你可以使用 sizeof 来确定数组的大小。由于数组名在大多数上下文中会退化为指向其第一个元素的指针,因此通过结合使用 sizeof 和数组名,你可以计算出数组中元素的数量。
  3. 文件读写

    在进行文件读写时,sizeof 可以帮助你确定一次读取或写入多少字节,这对于二进制文件尤其重要。
  4. 网络通信

    在网络编程中,发送和接收数据包时,sizeof 可以帮助你确定缓冲区的大小,确保数据的完整传输。
  5. 类型检查和调试

    sizeof 可以用来检查数据类型的大小是否符合预期,这对于跨平台编程特别有用,因为不同架构下的数据类型大小可能不同。
  6. 性能优化

    知道数据类型的确切大小可以帮助你优化数据布局和访问模式,减少缓存未命中,提升程序性能。
  7. 字节对齐

    sizeof 可以帮助理解数据类型的对齐要求,这对于编写低级代码和直接操作硬件时非常重要。
  8. 函数参数和返回类型

    可能需要传递数据类型大小作为函数参数,或者作为函数返回值的一部分。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!