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

C语言数据在内存中的存储

 

reference

n.提及,谈到;参考,查阅;(引自书或诗歌的)引言,引文;

引文的作者,参考书目;(帮助或意见的)征求,征询;

(为方便查询所用的)标记,编号;推荐信,介绍信;介绍人,推荐人

adj.参考的,用于查阅的;文献索引的,参照的

v.列出……的参考书目;提及,提到;引用,参照(某书或某作者)

1.C语言的数据类型

为什么每种语言都会规定数据类型呢?

emmm,请见我的下一篇文章,嘻嘻。

(1).数据类型分类

数据类型总的来说分为两类:内置类型、自定义类型、指针类型和空类型

2.整数在内存中的存储 

存储方式:

二进制的存储的方式一共有三种,原码、反码和补码,而整数是以二进制补码的形式进行存储的。

整数又分为正数和小数,导致它们的原反补码关系不同,具体如下:

正数:

        正数的原码、反码和补码相同,原码就是指这个数的二进制形式。

负数:

  • 负数的反码就是原码的符号位变,其它位按位取反,而补码就是在反码的基础上再加1。
  • 如果反码想得到原码就是反码减一。
  • 如果补码想要得到原码,取反加一或者减一取反。
  • 原因:

原因:CPU只有加法器,面对减法时无法计算,这时就需要将正数变为负数,进行加法计算,为了使得负数的符号位和数值位可以进行统一处理,这时就需要使用补码。具体详细内容请查看我的下一篇文章:《补码的由来》

例子1:

正数和负数的补码

例子2: 

补码转到原码

常见类型的范围大小:

当我们知道了整数是如何在内存中存储的了,下面我们来讨论一下有符号类型与无符号类型的差异,以及可能会犯的错误。

整形int

整形int按符号分为无符号类型和有符号类型,无符号类型就是指最高位表示值,有符号类型就是指最高位表示正负

大小:都是4个字节

范围:有符号[-32768~32767]        无符号[0~4294967295(2^32-1)]

可见类型的数据是有范围的,如果在使用时不注意类型的范围随意使用就会造成错误,比如下面这个例子,循环结束的条件设置为大于等于,而i本身就是无符号的数字,那么循环就会以继续下去,这就是不注意不同类型的范围所造成的结果。

字符类型

同上,字符类型按符号分为无符号类型和有符号类型,无符号类型就是指最高位表示值,有符号类型就是指最高位表示正负

大小:都是1个字节

范围:有符号[-128~127]        无符号[0~255]

同样,如果不注意它的范围也会出现问题,就如下面的例子,无符号的char类型的范围是不可能大于255的。

可见,在使用超级大的数值或者无符号类型时,一定要注意类型自身的范围!!!

3.浮点数在内存中的存储

标准:

根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式为:V   =  (−1) ^(S) * M * 2^(E),从而浮点数在二进制中只存S,M,E。

注:其实V   =  (−1) ^(S) * M * 2^(E)就是二进制的科学计数法。

科学计数法:

        科学计数法通常用于科学和工程领域,是一种有效的数学工具,它不仅使数值的表示更加简洁,在进行科学计算和数据分析时具有重要作用。【补充】

        科学计数法在不同进制下都有相应的表达方式,每种进制都遵循类似的结构和原则,但在具体的数字表示上会有所不同。【补充】

十进制:

  • 科学计数法是一种表示比较大的数或比较小的数的方法,它通过使用指数来简化表示。
  • 科学计数法通常以M*10^(E)的形式表示,其中M是一个在1到10之间的数,E是一个整数
  • 10又被称作基数,基数是指数部分的底数,由R表示。
  • 这种表示方法方便地表示非常大或非常的数,同时也便于进行计算和比较
  • 十进制的科学计数法是最常的一种形式。例如,光速为3 × 10^8米/秒太阳质量约为2 × 10^30千克。【补充】

二级制:

        二进制的科学计数法与十进制的类似,只是使用2作为基数。

  • V                  要存储的浮点数
  • S                  符号位浮点数的正负,S为1或0
  • M                 尾数,用二进制下科学计数法表示时的数值,大小范围:1 =< M < 2
  •                  指数,二进制下科学计数法2的次方个数
  • R                  基数,对于十进制数的基数则是10,对于二进制数的基数则是2

存储方式:

4字节:

        对于占4个字节的浮点数,32个比特位,方式如下:

8字节:

        对于占8个字节的浮点数,64个比特位,方式如下:

  • 注意因为科学计数法中的E可能为负数的,所以IEEE 754规定,存⼊内存时E的真实值必须再加上一个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023
  • 注意为啥加的是127和1023,因为E为负数时,2^(-127)已经非常小了接近0了,就规定把-127作为E的下限,同时128也是E的上限;对于8个字节的也同理,都是人为规定的
  • 注意存储的是M小数点后面数字,1是不存储在位里面的
  • 如果是1xx.xxxxx的情况,向前进,变成1.xxxxxxxxxxxx的形式,E为正值
  • 如果是0.xxxxxxxxx的情况,向后进位,变成1.xxxxxxxxxxxx的形式,E为负值
  • 注意真实存的不是E,存的也不是M

例子:

a.float n = 8.5;

第一步.将十进制的数字转换为二进制的数字

先介绍一下小数怎么转二进制,如下

        我们都知道整数每一位的权重是从2的0次方依次增加,那么浮点后面的数每一位的权重以2的-1次方依次递减,那么,0.5用二进制表示为0.1,0.25就是0.01等等。

8 = 1000,0.5=1 ,那么8.5 = 1000.1【转换就是整数小数都转】

第二步.用二进制下的科学计数法表示

1000.1 = 1.0001 * 2^(3)

【1000.1小数点往左移3位也就是2的3次方】

第三步.存储

此时,S = 0;E为3,加上127,转二进制是1000 0010;M存小数点后面二进制数就是0001

就是:0 10000010 00010000000000000000000

注意0001是从前往后存,存完后剩余位置的补0!!!!!!!!!!

b.float b = - 5.0

【负数去掉负号按照正数计算,将S赋1就可】

第一步.将十进制的数字转换为二进制的数字

5 = 0011,0 = 0,5.0 = 11.0

第二步.用二进制下的科学计数法表示

11.0= 1.10 * 2^(1)

第三步.存储

此时,S = 1;E为1,加上127,转二进制就是1000 0001;M存小数点后面二进制数就是0

就是:1 10000001 000000000000000000000000

特殊情况

上面我们讨论的都是E+127不全为0或不全为1的情况,下面我们讨论两种特殊的情况 。

c.E+127全为0

  • E+127全为0的时候,E=1-127,说明2^(E)这个数字是一个接近于0很小的数
  • 那么就规定小数点左边为0,不进行+1的操作。

d.E+127全为1

  • E+127全为1说明这个数值很大,2^(E)很大,十进制数字就是无穷大

4.大小端字节序

当超过1个比特位,有多个比特位时,我们就会考虑这么多的位的存放顺序,哪个位在前?哪个位在后?那么就规定出了一套存序法则,就是大小端字节序,大小端字节序是指的数据在内存中存储的方式不同。

首先在这之前,我们先给大家普及一个数字的低位高位知识:

        比如一个十进制数字1234,这里的4就是个位,3就是十位,2就是百位,1就是千位,那么个位就是低位,依次向前十百千,千就是最高位,那么对应的一个二进制数101,1就是个位,0就是2位,1就是4位;

        你猜我为啥和你说这些?就是因为大小端字节序的存储就是按照数字的低位存在高地址位和低地址位来划分的,下面我就为大家介绍大小端字节序。


大端字节序

定义:

        大端字节序存储是指将数据的低位存储在高地址处,而将数据的高位存储在低地址处

大端字节序

小端字节序

定义:

        大端字节序存储是指将数据的低位存储在低地址处,而将数据的高位存储在高地址处

小端字节序

例子

判断大小端字节序(VS的环境)

#include<stdio.h>
int main()
{int a = 1;//思路:要判断大小端只需要看它的低地址处存的是低位还是高位,地址是低地址内存单元的地址//那么拿出它的地址访问一个字节是1则为小端字节序,0则是大端字节序int b = *(char*)&a;if (b == 1)printf("小段字节序\n");if (b == 0)printf("大端字节序\n");return 0;
}


本章内容结束,下章见,拜拜!!!

相关文章:

C语言数据在内存中的存储

reference n.提及&#xff0c;谈到&#xff1b;参考&#xff0c;查阅&#xff1b;&#xff08;引自书或诗歌的&#xff09;引言&#xff0c;引文&#xff1b; 引文的作者&#xff0c;参考书目&#xff1b;&#xff08;帮助或意见的&#xff09;征求&#xff0c;征询&#xff1b…...

管理公司员工上网行为的软件都有哪些?

随着互联网的飞速发展&#xff0c;企业面临的网络安全威胁也日益加剧。为了保护企业数据安全、提高工作效率&#xff0c;上网行为管理系统及其相关管理软件应运而生。 未来&#xff0c;随着技术的不断进步和网络安全威胁的不断演变&#xff0c;上网行为管理系统及其管理软件将不…...

手撕C语言题典——逆序输出

有这样一个问题&#xff1a;读入一些整数&#xff0c;逆序输出到一行中。已知的是该整数不超过100个。我们该怎么办呢&#xff1f;我们先将这些整数循环输入&#xff0c;输入每个整数之后&#xff0c;我们只能将数组存下来&#xff0c;而这个地方就是数组。 本章可能用到的知识…...

如果保障服务器的安全

如果保障服务器的安全 一、修改它最开始的密码&#xff0c;后期也要一直更换。一般如果有客户来了服务器的话&#xff0c;服务器厂商都会提前把所有的系统都装好&#xff0c;之后再把这个权限交到用户的手里。很多用户可能在这方面不会特别注意&#xff0c;密码也不修改&#x…...

【SQL】1280. 学生们参加各科测试的次数 (笛卡尔积)

前述 知识点回顾&#xff1a;数据库中的四大join & 笛卡尔乘积&#xff08;以MySQL为例&#xff09; 笛卡尔积的两种写法 select * from stu,class; select * from stu cross join class; 题目描述 leetcode题目&#xff1a;1280. 学生们参加各科测试的次数 Code 写法…...

高企认定中科技成果转化是什么呢?

其实&#xff0c;这是一个流程&#xff0c;可以用下面的分段进程来表示&#xff1a;企业开展科研立项—科研立项得到科研结果—科研结果用于产品的生产—新产品品质提高带动了销售的增加。 上面的流程&#xff0c;其实是高企审核的核心&#xff0c;不仅仅关系到了量化打分。更…...

第十二届蓝桥杯省赛CC++ 研究生组-货物摆放

还是整数分解问题,注意n本身也是约数 #include <iostream> int main(){printf("2430");return 0; }#include <iostream> #include<cmath> #include<algorithm> using namespace std; typedef long long ll; const ll n 2021041820210418LL…...

基于SpringBoot的学生成绩管理系统

基于SpringBootVue的家教管理系统的设计与实现~ 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 系统功能结构展示 登录界面图 现今&#xff0c;越来越多的人乐于选择一项合适的管理方案&#xff0c;但是普通用户往往受到管理经验地限制&…...

旅游管理系统 |基于springboot框架+ Mysql+Java+Tomcat的旅游管理系统设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 系统功能设计 数据库E-R图设计 lunwen参考 摘要 研究…...

SpringBoot(整合MyBatis + MyBatis-Plus + MyBatisX插件使用)

文章目录 1.整合MyBatis1.需求分析2.数据库表设计3.数据库环境配置1.新建maven项目2.pom.xml 引入依赖3.application.yml 配置数据源4.Application.java 编写启动类5.测试6.配置类切换druid数据源7.测试数据源是否成功切换 4.Mybatis基础配置1.编写映射表的bean2.MonsterMapper…...

GAMES104-现代游戏引擎 1

主要学习重点还是面向就业&#xff0c;重点复习八股和算法 每天早上八点到九点用来学习这个课程 持续更新中... 第一节 游戏引擎导论 第二节 引擎架构分层 引擎是分层架构的 编辑器功能层资源层核心层平台层 越底层的代码越稳定越坚固&#xff0c;越上层的代码越灵活越开…...

idea 开发serlvet篮球秩序册管理系统idea开发mysql数据库web结构计算机java编程layUI框架开发

一、源码特点 idea开发 java servlet 篮球秩序册管理系统是一套完善的web设计系统mysql数据库 系统采用serlvetdaobean mvc 模式开发&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 servlet 篮…...

【深度学习】NestedTensors

文章目录 NestedTensorsWhy NestedTensor初始化 NestedTensorNestedTensor 操作reshape转置查看维度其他 NestedTensors DETR 中常见的数据格式为 NestedTensors&#xff0c;那么什么是 NestedTensors 呢&#xff1f; NestedTensor&#xff0c;包括 tensor 和 mask 两个成员&a…...

【网络】负载均衡

OSI模型每一层的负载均衡 在OSI模型中&#xff0c;每一层的负载均衡具体如下&#xff1a; 1. 第二层&#xff08;数据链路层&#xff09;&#xff1a;数据链路层的负载均衡通常涉及对MAC地址的操作。在这一层&#xff0c;可以使用虚拟MAC地址技术&#xff0c;外部设备对虚拟MA…...

dataGridView 绑定List 显示内容不刷新

绑定后,原list值变动,显示内容会刷新 绑定后,list新添加的值时不会显示到界面,需要重新绑定list 微软的Bug 参考代码 public class Student{public string Name { get; set; }}List<Student> list new List<Student>();private void Form2_Load(object sender,…...

VR历史建筑漫游介绍|虚拟现实体验店|VR设备购买

VR历史建筑漫游是一种利用虚拟现实技术&#xff0c;让用户可以身临其境地参观和探索历史建筑的体验。通过VR头显和相关设备&#xff0c;用户可以在虚拟环境中自由移动和互动&#xff0c;感受历史建筑的真实氛围和文化内涵。 在VR历史建筑漫游中&#xff0c;您可以选择不同的历史…...

Linux查看硬件型号详细信息

1.查看CPU &#xff08;1&#xff09;使用cat /proc/cpuinfo或lscpu &#xff08;2&#xff09;使用dmidecode -i processor Dmidecode 这款软件允许你在 Linux 系统下获取有关硬件方面的信息。Dmidecode 遵循 SMBIOS/DMI 标准&#xff0c;其输出的信息包括 BIOS、系统、主板、…...

【鸿蒙HarmonyOS开发笔记】通知模块之发布基础类型通知,内含如何将图片变成PixelMap对象

通知简介 应用可以通过通知接口发送通知消息&#xff0c;终端用户可以通过通知栏查看通知内容&#xff0c;也可以点击通知来打开应用。 通知常见的使用场景&#xff1a; 显示接收到的短消息、即时消息等。 显示应用的推送消息&#xff0c;如广告、版本更新等。 显示当前正…...

外包干了1个月,技术明显进步。。。

我是一名大专生&#xff0c;自19年通过校招进入湖南某软件公司以来&#xff0c;便扎根于功能测试岗位&#xff0c;一晃便是近四年的光阴。今年8月&#xff0c;我如梦初醒&#xff0c;意识到长时间待在舒适的环境中&#xff0c;已让我变得不思进取&#xff0c;技术停滞不前。更令…...

鸿蒙开发实战:【Faultloggerd部件】

theme: z-blue 简介 Faultloggerd部件是OpenHarmony中C/C运行时崩溃临时日志的生成及管理模块。面向基于 Rust 开发的部件&#xff0c;Faultloggerd 提供了Rust Panic故障日志生成能力。系统开发者可以在预设的路径下找到故障日志&#xff0c;定位相关问题。 架构 Native In…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;百货中心供应链管理系统被用户普遍使用&#xff0c;为方…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet&#xff0c;点击确认后如下提示 最终上报fail 解决方法 内核升级导致&#xff0c;需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...