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

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

相关推荐
Qiang_san10 分钟前
GNU Make | C/C++项目自动构建入门
c语言·c++·gnu
小红帽2.031 分钟前
从零构建一款开源在线客服系统:我的Go语言实战之旅
开发语言·golang·开源
slim~32 分钟前
Java基础第9天总结(可变参数、Collections、斗地主)
java·开发语言
源代码•宸41 分钟前
Leetcode—2749. 得到整数零需要执行的最少操作数【中等】(__builtin_popcountl)
c++·经验分享·算法·leetcode·位运算
芒果敲代码1 小时前
单一职责原则(SRP)
c++·单一职责原则
ComputerInBook1 小时前
C++编程语言:标准库:第37章——正则表达式(Bjarne Stroustrup)
开发语言·c++·正则表达式
青草地溪水旁2 小时前
C/C++中的可变参数 (Variadic Arguments)函数机制
c语言·c++·可变参数
A尘埃2 小时前
智能工单路由系统(Java)
java·开发语言·智能工单
汉克老师2 小时前
第十四届蓝桥杯青少组C++选拔赛[2023.2.12]第二部分编程题(1、求和)
c++·蓝桥杯·蓝桥杯c++·c++蓝桥杯
Source.Liu2 小时前
【Python基础】 13 Rust 与 Python 注释对比笔记
开发语言·笔记·python·rust