[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. 函数参数和返回类型

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

相关推荐
CYBEREXP20084 分钟前
MacOS M3源代码编译Qt6.8.1
c++·qt·macos
ZSYP-S23 分钟前
Day 15:Spring 框架基础
java·开发语言·数据结构·后端·spring
yuanbenshidiaos26 分钟前
c++------------------函数
开发语言·c++
yuanbenshidiaos30 分钟前
C++----------函数的调用机制
java·c++·算法
程序员_三木38 分钟前
Three.js入门-Raycaster鼠标拾取详解与应用
开发语言·javascript·计算机外设·webgl·three.js
是小崔啊1 小时前
开源轮子 - EasyExcel01(核心api)
java·开发语言·开源·excel·阿里巴巴
tianmu_sama1 小时前
[Effective C++]条款38-39 复合和private继承
开发语言·c++
黄公子学安全1 小时前
Java的基础概念(一)
java·开发语言·python
liwulin05061 小时前
【JAVA】Tesseract-OCR截图屏幕指定区域识别0.4.2
java·开发语言·ocr
jackiendsc1 小时前
Java的垃圾回收机制介绍、工作原理、算法及分析调优
java·开发语言·算法