C语言——数据在内存中的存储【整型数据在内存中的储存,大小端字节序储存,浮点型数据在内存中的储存】

这篇具有很好参考价值的文章主要介绍了C语言——数据在内存中的存储【整型数据在内存中的储存,大小端字节序储存,浮点型数据在内存中的储存】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

📝前言:
在前面的三篇文章中我们已经完成了对字符函数和字符串函数的学习,现在就让我们探索新领域,更加深入的理解**数据在内存中的存储方式**:
1,整数在内存中的存储
2,⼤⼩端字节序存储
3,浮点数在内存中的存储

🎬个人简介:努力学习ing
📋个人专栏:C语言入门基础
🎀CSDN主页 愚润求学
🌄每日鸡汤:请记住,人生唯一确定的,就是不确定的人生

一,整数在内存中的存储

对于整型数据来说:数据是以补码的形式存放在内存中

1,为什么要以补码的形式储存呢?

(简单来说)因为:
计算机的CPU只有加法器,但是在**二进制中,正数和负数的表示方法不同。如果我们想统一加法和减法的操作,就需要将所有的数(无论正负)都转换为一种表示方式**,【补码就是其中的一种表示方式。】
当都转化为补码这一种形式的时候,我们就可以统一加法和减法操作,从而简化了计算机的运算过程。

2,原码,反码,补码的区别

原码,反码,补码到底是什么?
其实原码,反码,补码只是数据的几种不同的表示方式
📑对于所有数据来说:数据二进制的表示方式就是它的原码

那不同数据的反码和补码呢?
我们把整型分成两大类:正数负数

①正数:

●正数的原码,反码,补码是相同的

例如(对于int 类型的数据5

原码:00000000000000000000000000000101
反码:00000000000000000000000000000101
补码:00000000000000000000000000000101

●无符号整型的反码补码原码也都是相同的(因为也都是正数)

②负数:

●原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。
●反码:将原码的**符号位不变其他位按位取反**就可以得到反码。
●补码:反码+1就得到补码

例如(对于整型数据-5

原码:10000000000000000000000000000101
反码:11111111111111111111111111111010
补码:11111111111111111111111111111011

(如果要通过补码得到原码:也可以通过【将补码符号位不变,其他位按位取反;再+1的方式】)

所以对5-5而言:
5 在内存中, 就是以5的补码 : 00000000000000000000000000000101存放的
-5在内存中,就是以-5的补码:11111111111111111111111111111011存放的

二,大小端字节序存储

1,⼤⼩端存储的区别

●⼤端(存储)模式:将数据低位字节的内容保存在内存的⾼地址处,⽽数据⾼位字节的内容,保存
在内存的低地址处。
●⼩端(存储)模式:将数据低位字节的内容保存在内存的低地址处,⽽数据⾼位字节的内容,保存
在内存的⾼地址处。

其实就是看数据**低位字节的内容保存在哪里**
●保存在内存的高地址处,就是大端存储
●保存在内存的低地址处,就是小端存储

例如,对于0x11223344这个数据:
C语言——数据在内存中的存储【整型数据在内存中的储存,大小端字节序储存,浮点型数据在内存中的储存】,C语言入门基础,c语言,开发语言,经验分享,学习方法,笔记
那么,我们来看看VS:
C语言——数据在内存中的存储【整型数据在内存中的储存,大小端字节序储存,浮点型数据在内存中的储存】,C语言入门基础,c语言,开发语言,经验分享,学习方法,笔记

我们可以看到:
a的内容11223344被储存为了44332211
这就是因为博主的计算机中的VS是用小端模式来储存数据的

2,为什么要有大小端存储之分?

C语言中的大小端存储之分主要是为了解决不同计算机系统之间的通信和数据交换问题。由于不同的计算机系统可能有不同的字节序,因此需要一种统一的方式来表示和传输数据。C语言提供了大小端存储之分,使得在不同的计算机系统之间可以正确地解析和传输数据
总的来说,大小端存储之分是为了解决不同计算机系统之间的字节序问题,以保证数据的正确解析和传输。

三,浮点型数据在内存中的储存

开门见山:浮点数在内存中的储存与整数是不一样的!
整数是以补码的方式储存,那浮点数呢?

1,二进制浮点数的另一种表示形式

我们先来了解二进制浮点数的另一种表示形式👇🏻

根据国际标准IEEE🔍, 任意⼀个⼆进制浮点数V可以表⽰成下⾯的形式:
(-1)^S * M * 2^E
• (−1)^S 表⽰符号位,当S=0,V为正数;当S=1,V为负数
• M 表示有效数字,(1<=M<2)
• 2^E表示指数位。

比如👇🏻:
•⼗进制的5.0,写成⼆进制是 101.0 ,相当于 1.01×2^2
【 S=0,M=1.01,E=2 】
•⼗进制的-5.0,写成⼆进制是 -101.0 ,相当于 - 1.01×2^2
【 S=1,M=1.01,E=2 】
•十进制的5.5,写成二进制是 101.1 ,相当于 1.011×2^2
【S=0,M=1.011,E=2】
(注意这里都是二进制,所以每一位上对应的权重的底数应该是2)
比如101.1:从左到右每位数依次对应的权重是:2^2, 2^1, 2^0, 2^(-1)

2,浮点数储存过程

我们可以发现,每个浮点数,都可以用S M E 三个数据来表示出来,因此我们在储存时,也只需储存好这三个数据就可以了

IEEE 754规定:
•对于32位的浮点数,最⾼的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数字M
•对于64位的浮点数,最⾼的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M
👇🏻
C语言——数据在内存中的存储【整型数据在内存中的储存,大小端字节序储存,浮点型数据在内存中的储存】,C语言入门基础,c语言,开发语言,经验分享,学习方法,笔记

1)符号位S的储存

•正数储存0
•负数储存1

2)有效数M的储存

浮点数中的有效数一般写成 1.xxxxxx 的形式,其中 xxxxxx 表⽰⼩数部分。
如:浮点数5.51.011×2^2011是小数部分

🔍IEEE 754 规定,在计算机内部保存M时,默认这个数的第⼀位总是1,因此会被舍去,只保存后⾯的xxxxxx部分。(因为1<=M<2,M总是1.xxxxxx 的形式)
如:浮点数5.5,只保留011这个小数部分

3)指数E的储存

E为⼀个⽆符号整数(unsigned int),意味着,如果E为8位,它的取值范围为0到255;如果E为11位,它的取值范围为0到2047。但是,科学计数法中,指数E可能是负数!!!
所以👇🏻
IEEE 754规定,E存⼊内存时,E的真实值必须再加上⼀个中间数:
•对于8位的E,这个中间数是127
•对于11位的E,这个中间数是1023
⽐如,5.52^2的E是2,所以保存成32位浮点数时,必须保存成2+127=129,即10000001

所以浮点数5.5在内存中的储存应该是:
C语言——数据在内存中的存储【整型数据在内存中的储存,大小端字节序储存,浮点型数据在内存中的储存】,C语言入门基础,c语言,开发语言,经验分享,学习方法,笔记

2,浮点数取的过程

1)E不全为0或不全为1

•指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第⼀位的1
如取5.5
•S = 0
•E:10000001(十进制的129),129-127 = 2 ,得到真实值E = 2
•再将有效数字M(011)前加上第⼀位的1,得1.011
所以,5.5 = (-1)^0 × 1.011 × 2^2

2)E全为0

表示趋近于0的很小的数字
这时,浮点数的指数E等于1-127(或者1-1023)即为真实值,有效数字M不再加上第⼀位的1,⽽是还
原为0.xxxxxx的⼩数。这样做是为了表⽰±0,以及接近于0的很⼩的数字

0 00000000 00100000000000000000000

3)E全为1

表⽰±⽆穷⼤(正负取决于符号位S)

0 11111111 00010000000000000000000

🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!文章来源地址https://www.toymoban.com/news/detail-764830.html

到了这里,关于C语言——数据在内存中的存储【整型数据在内存中的储存,大小端字节序储存,浮点型数据在内存中的储存】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度刨析数据在内存中的储存(C语言进阶)

    本章重点 数据类型详细介绍 整型在内存中的储存 大小端字节序介绍及判断 浮点型在内存中的存储解析 前面我们已经介绍过基本的内置类型,以及他们所占空间的大小 ✊类型的意义 : 使用这个类型开辟内存空间的大小(大小决定了适用范围) 如何看待内存空间视角 1.1 类

    2024年02月14日
    浏览(38)
  • 结构体占用内存大小如何确定?-->结构体字节对齐 | C语言

    目录 一、什么是结构体 二、为什么需要结构体 三、结构体的字节对齐 3.1、示例1 3.2、示例2 3.3、示例3  3.4、示例4 3.5、示例5 四、结构体字节对齐总结         结构体是将不同类型的数据按照一定的功能需 求进行整体封装,封装的数据类型与大小均可以由用户指定。 结

    2024年01月17日
    浏览(48)
  • C语言数据存储 — 整型篇

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

    2024年02月09日
    浏览(47)
  • C语言:数据在内存中的存储

    在讲解操作符的时候,我们就讲过了下⾯的内容: 整数的2进制表示方法有三种,即 原码、反码和补码 三种表示方法均有 符号位 和 数值位 两部分,符号位都是用0表示“正”,用1表示“负”,而数值位最高位的⼀位是被当做符号位,剩余的都是数值位。 正整数的原、反、

    2024年04月10日
    浏览(47)
  • c语言-数据在内存中的存储

    1.整数的2进制表示方法有三种,即 原码、反码和补码 2. 三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而数值位最高位的一位是被当做符号位,剩余的都是数值位。 3. 存储时存储的是补码,取出的时取出的原码 如: 正负数的原码、反

    2024年02月04日
    浏览(42)
  • 数据在内存中的存储(C语言)

    ​ ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ ​ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 ​ 所属专栏:C语言学习 ​ 贝蒂的主页:Betty‘s blog ​ 我们早就学完基本的数据类型,那这些数据类型到底在内存中怎么存储的呢~,今天贝蒂就带大家一起深入学习一下吧 1.1 整型 贝蒂说:“因

    2024年02月02日
    浏览(36)
  • 【C语言】数据在内存中的存储

    什么叫做浮点数,就是有小数的数据就要浮点数,比如:5.5 6.5 9.0等一些数据就叫浮点数,那么浮点数又是怎么在内存中存放的呢,下面听我一一道来。 浮点型的家族包括:float double long double 我们以以下代码为例比较下浮点数和整型数据内存中的存储是如何的: 打印的结果

    2024年02月07日
    浏览(38)
  • C语言数据在内存中的存储

    目录 前言 本期内容介绍 一、数据类型的介绍 1.1类型的意义: 1.2C语言中是否有字符串类型? 1.3类型的基本归类 整型家族: 浮点型(实型)家族: 构造(自定义)类型: 指针类型: 空类型: 二、整型在内存中的存储 2.1原码、反码、补码 总结: 2.2大小端字节序介绍 2.3什

    2024年02月16日
    浏览(38)
  • <C语言> 数据在内存中的存储

    C语言中的基本内置类型如下: 类型的意义: 1.使用这个类型开辟内存空间的大小(大小决定了使用范围)。 2.如何看待内存空间的视角。 整型家族: 注意:char有些编译器没有规定是unsigned还是signed 浮点数家族: 构造类型: 指针类型: 空类型: void 表示空类型(无类型)

    2024年02月16日
    浏览(38)
  • C语言——数据在内存中的存储

    本章重点 1. 数据类型详细介绍 2. 整形在内存中的存储:原码、反码、补码 3. 大小端字节序介绍及判断 4. 浮点型在内存中的存储解析 目录 1. 数据类型介绍 1.1 类型的基本归类 2. 整形在内存中的存储 2.1 原码、反码、补码 2.2 大小端介绍 2.3 练习 2.4 unsigned char 和 signed char的区别

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包