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

我们都知道,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. 函数参数和返回类型

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/48265.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringAI简单使用(本地模型+自定义知识库)

Ollama 简介 Ollama是一个开源的大型语言模型服务工具&#xff0c;它允许用户在本地机器上构建和运行语言模型&#xff0c;提供了一个简单易用的API来创建、运行和管理模型&#xff0c;同时还提供了丰富的预构建模型库&#xff0c;这些模型可以轻松地应用在多种应用场景中。O…

arm 内联汇编基础

一、 Arm架构寄存器体系熟悉 基于arm neon 实现的代码有 intrinsic 和inline assembly 两种实现。 1.1 通用寄存器 arm v7 有 16 个 32-bit 通用寄存器&#xff0c;用 r0-r15 表示。 arm v8 有 31 个 64-bit 通用寄存器&#xff0c;用 x0-x30 表示&#xff0c;和 v7 不一样…

如何在 PostgreSQL 中处理海量数据的存储和检索?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 如何在 PostgreSQL 中处理海量数据的存储和检索&#xff1f;一、优化表结构设计二、分区技术三、数据压…

ceph log内容解析

log内容构造 如osd的一条log 分别表示 时间戳 线程id 日志等级 子模块 内容实体 剖析源码实现 每条log都是由一个Entry构成 定义在src/log/entry.h中 Entry(short pr, short sub) :m_stamp(clock().now()), // 打印日志时的时间戳m_thread(pthread_self()), // 打印日志的线…

【精品资料】智慧物流园区整体架构方案(46页PPT)

引言&#xff1a;智慧物流园区整体架构方案是一个集现代信息技术、物联网、大数据、云计算及人工智能等前沿科技于一体的综合性物流园区建设蓝图。该方案旨在通过高度集成和智能化的系统&#xff0c;优化物流流程&#xff0c;提升运营效率&#xff0c;降低运营成本&#xff0c;…

智慧新零售移动端收银视频介绍

千呼新零售2.0系统是零售行业连锁店一体化收银系统&#xff0c;包括线下收银线上商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。 适用于商超、便利店、水果、生鲜、母婴、服装、零食、百货、宠物等连锁店使用。 详细介绍请…

“信息科技风险管理”和“IT审计智能辅助”两个大模块的部分功能详细介绍:

数字风险赋能中心简介 数字风险赋能中心简介 &#xff0c;时长05:13 大家好&#xff01;我是AI主播安欣&#xff0c;我给大家介绍一下数字风险赋能中心。 大家都知道当前我国政企机构的数字化转型已经进入深水区&#xff0c;数字化转型在给我们带来大量创新红利的同时&#xf…

2024年第二季度 DDoS 威胁趋势报告

2024 年上半年&#xff0c;Cloudflare 缓解了 850 万次 DDoS 攻击&#xff1a;第一季度 450 万次&#xff0c;第二季度 400 万次。总体而言&#xff0c;第二季度 DDoS 攻击数量环比下降了 11%&#xff0c;但同比增长了 20%。 DDoS 攻击分布&#xff08;按类型和手段&#xff09…

Python+Django+MySQL的新闻发布管理系统【附源码,运行简单】

PythonDjangoMySQL的新闻发布管理系统【附源码&#xff0c;运行简单】 总览 1、《新闻发布管理系统》1.1 方案设计说明书设计目标工具列表 2、详细设计2.1 登录2.2 程序主页面2.3 新闻新增界面2.4 文章编辑界面2.5 新闻详情页2.7 其他功能贴图 3、下载 总览 自己做的项目&…

破解打家劫舍:动态规划与二分查找的高效算法

目录 198. 打家劫舍 解法一:一维动态规划 解法二&#xff1a;二维动态规划 213. 打家劫舍 II 思路分析 代码实现 337. 打家劫舍 III 思路分析 代码实现 2560. 打家劫舍 IV 思路分析 参考博客 198. 打家劫舍 如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统…

【Qt】QWidget核心属性相关API

目录 一. enabled——是否可用 二. geometry——几何位置 window frame 三. windowTitle——窗口标题 四. windowIcon——窗口图标 ​qrc文件 五. windowOpacity——透明度 六. cursor——光标 自定义光标 七. font——字体 八. toolTip——提示栏 九. focusPolic…

【QT】QT 概述(背景介绍、搭建开发环境、Qt Creator、程序、项目文件解析、编程注意事项)

一、Qt 背景介绍 1、什么是 Qt Qt 是一个跨平台的 C 图形用户界面应用程序框架。 它为应用程序开发者提供了建立艺术级图形界面所需的所有功能。它是完全面向对象的&#xff0c;很容易扩展。Qt 为开发者提供了一种基于组件的开发模式&#xff0c;开发者可以通过简单的拖拽和…

天空星LVGL移植记录

一、移植的LVGL版本8.2 下载地址&#xff1a;&#xff08;网页下个加速脚本&#xff09;GitHub - lvgl/lvgl: Embedded graphics library to create beautiful UIs for any MCU, MPU and display type.https://github.com/lvgl/lvgl 二、硬件设备 天空星STM32F407VET6 ILI9…

vue3中provide 和 inject 用法#Vue3中解决局部刷新问题

vue3中provide 和 inject 用法#Vue3中解决局部刷新问题 在父子组件传递数据时&#xff0c;通常使用的是 props 和 emit&#xff0c;父传子时&#xff0c;使用的是 props&#xff0c;如果是父组件传孙组件时&#xff0c;就需要先传给子组件&#xff0c;子组件再传给孙组件&…

【JavaScript 算法】KMP算法:高效的字符串匹配

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、算法原理部分匹配表的构建 二、算法实现构建部分匹配表KMP字符串匹配注释说明&#xff1a; 三、应用场景四、总结 KMP算法&#xff08;Knuth-Morris-Pratt Algorithm&#xff09;是一种用于在文本中高效查找子串的字符串…

昇思学习打卡-21-生成式/Diffusion扩散模型

文章目录 Diffusion扩散模型介绍模型推理结果 Diffusion扩散模型介绍 关于扩散模型&#xff08;Diffusion Models&#xff09;有很多种理解&#xff0c;除了本文介绍的离散时间视角外&#xff0c;还有连续时间视角、概率分布转换视角、马尔可夫链视角、能量函数视角、数据增强…

【BUG】已解决:AttributeError: ‘DataFrame‘ object has no attribute ‘append‘

已解决&#xff1a;AttributeError: ‘DataFrame‘ object has no attribute ‘append‘ 目录 已解决&#xff1a;AttributeError: ‘DataFrame‘ object has no attribute ‘append‘ 【常见模块错误】 错误原因&#xff1a; 解决办法&#xff1a; 欢迎来到英杰社区https:/…

215. 数组中的第K个最大元素 347. 前 K 个高频元素(LeetCode热题100)

215. 数组中的第K个最大元素 - 力扣&#xff08;LeetCode&#xff09; 写个快排&#xff0c;使数组升序&#xff0c;返回倒数第k个元素即可 func quickSort(nums []int, l int, r int) {if l > r {return}x : nums[(l r) / 2]i : l - 1j : r 1for i < j {for {iif n…

[力扣Java解题分享]12.74搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。…

大鲸鱼docker-compose单机容器集群编排工具

目录 一、Docker-compose 概述 二、Docker-compose简介 三、YML文件格式及编写注意事项 1.yml文件是什么 2.yml问价使用注意事项 3.yml文件的基本数据结构 四、Docker-compose 配置 1.Docker-Compose 配置常用字段 2.Docker Compose常用命令 3.使用Docker-compose创建…