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

我们都知道,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;
}

这个技巧非常的有用。

  1. 内存管理

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

  2. 数组操作

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

  3. 文件读写

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

  4. 网络通信

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

  5. 类型检查和调试

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

  6. 性能优化

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

  7. 字节对齐

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

  8. 函数参数和返回类型

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

相关推荐
liO_Oil几秒前
(2024.9.19)在Python的虚拟环境中安装GDAL
开发语言·python·gdal安装
万物得其道者成15 分钟前
React Zustand状态管理库的使用
开发语言·javascript·ecmascript
学步_技术21 分钟前
Python编码系列—Python抽象工厂模式:构建复杂对象家族的蓝图
开发语言·python·抽象工厂模式
BeyondESH43 分钟前
Linux线程同步—竞态条件和互斥锁(C语言)
linux·服务器·c++
wn53144 分钟前
【Go - 类型断言】
服务器·开发语言·后端·golang
豆浩宇1 小时前
Halcon OCR检测 免训练版
c++·人工智能·opencv·算法·计算机视觉·ocr
Hello-Mr.Wang1 小时前
vue3中开发引导页的方法
开发语言·前端·javascript
救救孩子把1 小时前
Java基础之IO流
java·开发语言
WG_171 小时前
C++多态
开发语言·c++·面试
宇卿.1 小时前
Java键盘输入语句
java·开发语言