当前位置: 首页 > news >正文

C语言数据存储 — 整型篇

C语言数据存储 — 整型篇

  • 前言
  • 1. 数据类型介绍
    • 1.1 类型的基本分类
  • 2. 整型在内存中的存储
    • 2.1 原码、反码、补码
      • 2.1.1 为什么数据存放在内存中存放的是补码
    • 2.2 大小端介绍
      • 2.2.1 什么是大小端?
      • 2.2.2 为什么有大端和小端?
      • 2.2.3 一道百度系统工程师笔试题
  • 3. 结尾

前言

在C语言中,了解相关数据存储对一名优秀程序员来说是至关重要的!通过相关原理,从而更加深入地理解计算机如何存储和操作数据,这对于编程人员来说是非常重要的。只有深入理解计算机存储和操作数据的原理,才能编写出更加高效、可靠的程序。本文将详细介绍C语言中整型数据是如何存储的,希望能帮助读者在编程路上更近一步!!

1. 数据类型介绍

C语言中,基本的内置类型和大小如下:
在这里插入图片描述
类型的意义:

  1. 使用这个类型开辟内存空间的大小(大小决定了使用范围)
  2. 如何看待内存空间的视角

1.1 类型的基本分类

整型家族:
在这里插入图片描述
浮点数家族:

float
double
(long double)

构造类型:


数组类型
结构体类型 struct
枚举类型 enum
联合类型 union

指针类型:

int *pi;
char *pc;
float *pf
void *pv;
……

空类型:

void 表示空类型(无类型)
通常应用于函数的返回类型、函数的参数、指针类型。

2. 整型在内存中的存储

一个变量的创建是要在内存上开辟空间的。而空间的大小是根据不同的类型而决定的。

接下来我们将介绍数据在所开辟的内存中是如何存储的!
比如:

int a = 20;
int b = -10;

我们知道a/b分别分配了4字节的空间,那如何存储?

在介绍之前,我们要先了解以下概念。

2.1 原码、反码、补码

计算机中的整数有三种2进制表示方法,即原码、反码和补码。
三种表示方法均有 符号位数值位两部分.符号位都是用0表示“正”,用1表示“负”。

  • 正数的原码、反码、补码都相等
  • 负整数的三种表示方式各不相等。

负整数的三种表示方法:

原码:
直接将数值按照正负数的形式翻译成二进制的形式就可以得到原码。

补码:
将原码的符号位不变,其他位按位取反就得到反码。

补码:
反码+1就得到补码。

2.1.1 为什么数据存放在内存中存放的是补码

在计算机系统中,数值一律用补码来表示和存储。原因在于,使用补码,可以将符号位和数值位统一处理;
同时,加法和减法也可以统一处理(CPU只有加法器),此外,补码和原码相互转换,其运算过程是相同的,不需要额外的硬件电路。

例子:

在计算机中,数值一律用补码来表示和存储。原因在于,是用补码,可以将符号位和数值位统一处理
例如:结算1 + (-1)使用原码计算
00000000 00000000 00000000 00000001 --> 1的原码 
10000000 00000000 00000000 00000001 --> -1的原码 
10000000 00000000 00000000 00000020 --> 结果-2
原码计算错误使用补码计算00000000 00000000 00000000 00000001 --> 1的补码11111111 11111111 11111111 11111111 --> -1的补码
100000000 00000000 00000000 00000000 -->结果0
补码计算正确

Tips:

  • 补码和原码相互转化运算过程是相同的。即原码符号位不变,其他位按位取反的到反码;反码+1得到补码。而由补码反推原码时,除了将上述过程力推,还可以补码符号位不变,其他位按位取反后在+1即可得到原码。

我们再来看看内存中的存储(以vs为例):
在这里插入图片描述
我们可以看到对于a存放在内存中的补码,我们发现顺序有点不对劲!
这是为什么呢?
这就不得不提到大小端了。

2.2 大小端介绍

2.2.1 什么是大小端?

大端(存储)模式又称大端字节序存储:数据的低位字节中的数据存放在高地址处,高位字节中的数据存放在低地址处。
小端(存储)模式又称小端字节序存储:数据的低位字节中的数据存放在低地址处,高位字节中的数据存放在高地址处。

Tips:

  • 字节序:以字节为单位,讨论内存的存储顺序。

2.2.2 为什么有大端和小端?

为什么会有大小端模式之分呢?
这是因为在计算机系统中,我们是以字节为单位的,每一个地址单元对应一个字节,一字节为8bit.但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(具体要看编译器)等。另外,对于位数大于8位的处理器,例如16位或32位的处理器 ,由于寄存器宽度大于一个字节,那么必然存在着一个如何将多个字节安排的问1题。因此就导致了大端存储模式和小端存储模式!

例如:

一个16bit的short型x, 在内存中的地址为0x0010,x的值为0x1122。那么0x11为高字节,0x22为低字节。
对于大端模式,就将0x11放在高地址处,即0x0011中;而0x22放在低地址中,即0x0011中。小端模式,刚好相反。

  • 我们常用的x86和x64结构是小端模式,而KEIL C51则是大端模式。很多的ARM, DSP都为小端模式。有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。

2.2.3 一道百度系统工程师笔试题

请简要介绍大端字节序和小端字节序的概念,设计一个小程序来判断当前机器的字节序。(10分)

相关概念读者自行查看2.2.1。

下面来分析如何设计小程序来判断数据存储模式。

如下图所示,我们可以用数字1即可解决问题。
我们发现如果是小端模式,第一个字节中存放的数据为1;如果是大端模式,第一个字节中存放的数据为0。
接下来问题转化为:如何让编译器只访问一个字节空间呢?
其实很简单,我们只需要将a的指针强制类型转换为char*,在解引用访问即可。

代码实现:

//代码1
判断当前机器的自己序
int check_sys()
{int a = 1;char* ret = (char*)&a;if (*ret == 1)return 1;elsereturn 0;
}int main()
{int ret = check_sys();if (ret == 1)printf("小端\n");elseprintf("大端\n");return 0;
}//代码2,简化代码1
int check_sys()
{int a = 1;//大端返回0,小端返回1return *(char*)&a;
}
int main()
{int ret = check_sys();if (ret == 1)printf("小端\n");elseprintf("大端\n");return 0;
}

3. 结尾

本篇文章到此就结束了。接下来在C语言数据存储 — 浮点数篇中将详细介绍浮点数相关知识,敬请期待。如果对您有帮助,记得三连哦!感谢您的支持!!

相关文章:

C语言数据存储 — 整型篇

C语言数据存储 — 整型篇 前言1. 数据类型介绍1.1 类型的基本分类 2. 整型在内存中的存储2.1 原码、反码、补码2.1.1 为什么数据存放在内存中存放的是补码 2.2 大小端介绍2.2.1 什么是大小端?2.2.2 为什么有大端和小端?2.2.3 一道百度系统工程师笔试题 3…...

高级Excel功能教程_编程入门自学教程_菜鸟教程-免费教程分享

教程简介 Excel是办公室自动化中非常重要的一款软件,Excel函数则是Excel中的内置函数。Excel函数共包含11类,分别是数据库函数、日期与时间函数、工程函数、财务函数、信息函数、逻辑函数、查询和引用函数、数学和三角函数、统计函数、文本函数以及用户…...

ChatGPT会取代低代码开发平台吗?

编程作为一种高端技能,向来是高收入高科技的代名词。近期,伴随着ChatGPT在全球的爆火,过去通过窗口“拖拉拽”的所见即所得方式的低代码开发模式,在更加智能和更低成本的AI搅局之下,又面临了更深层次的影响。 低代码平…...

Linux :: 文件内容操作【5】:echo 指令 与 输入重定向、输出重定向、追加重定向在文件内容写入中的简单用法!

前言:本篇是 Linux 基本操作篇章的内容! 笔者使用的环境是基于腾讯云服务器:CentOS 7.6 64bit。 学习集: C 入门到入土!!!学习合集Linux 从命令到网络再到内核!学习合集 说明&#x…...

【RocketMQ】重试机制及死信消息处理

【RocketMQ】重试机制及死信消息处理 文章目录 【RocketMQ】重试机制及死信消息处理1. 重试机制1.1 生产者重试1.2 消费者重试1.2.1 死信队列 参考文档: 官方文档 1. 重试机制 1.1 生产者重试 rocketmq生产者发送消息失败默认重试2次(同步发送为2次,异…...

Mysql DDL执行方式-pt-osc介绍 | 京东云技术团队

1 引言 大家好,接着上次和大家一起学习了《MySQL DDL执行方式-Online DDL介绍》,那么今天接着和大家一起学习另一种MySQL DDL执行方式之pt-soc。 在MySQL使用过程中,根据业务的需求对表结构进行变更是个普遍的运维操作,这些称为…...

C++ stack容器介绍

🤔stack容器介绍: 📖 stack是一种数据结构,也可以被称为堆栈。它是一个容器,只允许在最顶层进行插入和删除,并且只能访问最后一个插入的元素。这个元素称为栈顶。所有新插入的元素都被放置在栈顶上面&#…...

在 Git 中撤消更改的 6 种方法!

目录 1. 修改最近的提交 2. 将分支重置为较旧的提交 硬重置 软重置分支 创建备份分支 3. 交互式变基 删除旧提交 改写提交消息 编辑旧提交 压缩 4. 还原提交 5. 签出文件 6. 使用 Git Reflog 当使用 Git 进行项目代码管理时,难免会出现一些错误操作或需…...

LiveGBS国标GB/T28181国标平台功能-电子地图移动位置订阅mobileposition地图定位GPS轨迹坐标位置获取redis获取位置

LiveGBS国标GB/T28181国标平台功能-电子地图移动位置订阅mobileposition地图定位GPS轨迹坐标位置获取redis获取位置 1、位置订阅1.1、国标设备编辑1.2、选择设备开启位置订阅1.3、全局开启位置订阅1.4、通过目录订阅获取位置(少数情况) 2、经纬度信息查询2.1、访问接口获取2.1.…...

编程(38)----------计算机的部分原理

本篇主要总结一些计算机的理论部分. 计算机在发展历程中,无论是最早的巨无霸机器,还是现在小到可以拿在手中的掌机.只要其本质上是计算机,在最基础的结构上,都是以冯诺依曼体系所构建的. 冯诺依曼体系大致将计算机分为几个最重要的部分:输入,输出,中央处理器,存储设备.也就是…...

若依框架快速搭建(二)

目录 数据库设计功能模块设计XXX信息管理xxx查询xxx添加xxx删除xxx修改xxx导出 功能模块实现运行数据库自动代码生成在IDEA中找到RuoYi-generator,修改配置运行前后端项目,在网页中找到代码生成模块导入表后点击确定,序号前打勾,再…...

为建筑物的供暖系统实施MPC控制器的小型项目(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

【概率论】中心极限定理(二)

文章目录 主观题主观题 每袋味精的净重为随机变量,平均重量为 100 克,标准差为 10 克。一箱内装 200 袋味精,求一箱味精的净重大于 20500 克的概率? 解: ① E ( X i ) = 100 , D ( X i ) = 1 0 2...

Blender UV展开流程

目录 1. UV1.1 blender默认物体1.2 创建物体1.3 UV参考图1.4 标记缝合边1.5 UV拉伸1.6 孤岛模式 1. UV 1.1 blender默认物体 默认物体已经自动生成UV 在UV编辑工作区,编辑模式,全选物体在左边自动展开UV 在物体数据属性-UV贴图-存在默认的UV贴图&#…...

Flutter 笔记 | Flutter 核心原理(二)关键类和启动流程

Widget、Element、BuildContext 和 RenderObject Widget Widget关键类及其子类继承关系如图所示: 其中,Widget是Widget Tree所有节点的基类。Widget的子类主要分为3类: 第1类是RenderObjectWidget的子类,具体来说又分为SingleCh…...

Android:主题切换

一.概述 正在开发的应用做了一版新UI,原打算将新版UI按项目名做成资源包,再在build.gradle里productFlavors{ }多渠道打包实现 但被告知新旧两个项目共用一个分支,那就做成两个主题(Theme1/Theme2)来适配了 如果只是变更UI,做成…...

terminalworks ASP.NET Core PDF 浏览器-Crack

ASP.NET Core 的 PDF 查看器 terminalworks在 ASP.NET Core 网页或应用程序中添加可靠的 PDF 查看器的简单方法。 我们的 Web PDF 查看器基于经过验证和测试的 Mozilla PdfJS 解决方案,该解决方案在 Firefox 中用作默认 PDF 查看器。我们专门设计了我们的查看器&…...

Rust每日一练(Leetday0020) 最后单词的长度、螺旋矩阵II、排列序列

目录 58. 最后一个单词的长度 Length of Last Word 🌟 59. 螺旋矩阵 II Spiral Matrix II 🌟🌟 60. 排列序列 Permutation Sequence 🌟🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日…...

短视频矩阵源码如何做应用编程?

短视频矩阵源码, 短视频矩阵系统技术文档: 可以采用电子文档或者纸质文档的形式交付,具体取决于需求方的要求。电子文档可以通过电子邮件、远程指导交付云存储等方式进行传输、 短视频矩阵{seo}源码是指将抖音平台上的视频资源进行筛选、排…...

【运维知识进阶篇】Ansible实现一套完整LNMP架构

前面介绍了PlayBook怎么写服务部署,把服务部署上后,我们来用Ansible来部署项目,实现一套完整的LNMP架构。我们部署wordpress、wecenter、phpshe、phpmyadmin这四个项目。将其所有的剧本都写入lnmp.yml中,相关备份数据都放入root/a…...

中小型企业构建内部AI助手时如何通过Taotoken实现成本与权限的双重管控

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 中小型企业构建内部AI助手时如何通过Taotoken实现成本与权限的双重管控 应用场景类,企业部署内部AI助手需考虑成本与安…...

STM32F103C6T6模拟SPI驱动ADS1220:从硬件连接到代码调试的完整避坑指南

STM32F103C6T6模拟SPI驱动ADS1220:从硬件连接到代码调试的完整避坑指南 在嵌入式开发领域,高精度数据采集一直是工程师们面临的挑战之一。TI公司的ADS1220作为一款24位Δ-Σ模数转换器,以其出色的噪声性能和灵活的配置选项,成为许…...

Win10 64 位专用 OpenClaw 小龙虾 AI 小白一键部署教程

适配系统:Windows10 64 位核心亮点:免命令行、免手动配置环境、解压即可安装,运行依赖全部内置,全程可视化操作,新手也能一次性顺利部署 2026 热门开源 AI 智能体专属优化:针对 Win10 系统定制适配&#xf…...

TCP三次握手与四次挥手——连接管理的“仪式感“

**导读:**如果说HTTP是互联网世界的"通用语言",那么TCP就是支撑这一切的"地下管道"。但这条管道不是想通就通的——它有一套严格的"礼仪规范",也就是我们常说的三次握手和四次挥手。今天,我们就来聊…...

AI赋能“一人公司”创业热潮:机遇背后潜藏哪些风险?

“一人公司”创业范式席卷全国从苏州到深圳,从成都到上海,一种名为OPC(One Person Company,一人公司)的创业范式正以前所未有的速度席卷全国。全国已涌现出超过700个OPC社区,其中,WeOPC平台聚集…...

ColabFold终极指南:5分钟免费预测蛋白质三维结构

ColabFold终极指南:5分钟免费预测蛋白质三维结构 【免费下载链接】ColabFold Making Protein folding accessible to all! 项目地址: https://gitcode.com/gh_mirrors/co/ColabFold 想要探索蛋白质的神秘世界却苦于没有高性能计算设备?ColabFold为…...

如何快速修复损坏的QR码:QrazyBox终极指南

如何快速修复损坏的QR码:QrazyBox终极指南 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 你是否曾遇到过打印的二维码被咖啡渍污染,或者手机拍摄的二维码模糊不清&…...

服务器CPU架构对决:Chiplet与Monolithic技术解析与选型指南

1. 市场格局的悄然变迁:从“牙膏厂”到“撕裂者”的冲击如果你最近几年一直在关注数据中心和服务器市场,一个非常明显的趋势是,曾经由英特尔至强处理器几乎垄断的“铁王座”,正在被AMD的EPYC(霄龙)处理器一…...

职场新人不会写自我介绍怎么办?AI三分钟帮你搞定,面试邀约直接翻倍!

嘿,各位刚踏入职场的小萌新、想跳槽但又苦于没新项目亮点的打工人!你是不是也遇到过这种尴尬:辛辛苦苦写完简历,最后却卡在“自我介绍”或者“个人总结”那块? 要么就是寥寥几句套话,像“本人性格开朗&…...

为什么AI终于能进车间了?从聊天工具到生产力,这三件事正在发生

中石化车间里的AI 2026年5月,中石化发布了"烽火"工业智能体。 这个智能体不是用来聊天的,而是能直接操作工业软件、分析生产数据、跑仿真。它是石油化工行业第一个真正能进车间的数字专家。 在这之前,AI在工业场景里的应用,大多停留在"数据分析"层面…...