数据在内存中的存储(各种各样的都有)

引子

今天我们来讨论一下关于数据在计算机中的储存,这个知识点其实不难,但是也是有难度的。难在知识点多,难背,又很杂,每一个知识点基本上没有联系,所以我们在学习另一个知识点的时候,之前的思路可能就不对了。但是我们要有一个中心思想就是,数据的储存。他为什么要以这样的形式储存就一定有他的道理(他的好处),毕竟c语言的设计师也是人,肯定的怎么简单怎么设计。如果这个不简单,那就是因为他有一些特殊的功能在这个情况下用不了。

我们先讲一讲我们本章讲的知识点1.原码,反码,补码。2.大小端。3.浮点数的储存。

原码,反码,补码

原码,反码,补码。我们还是很熟悉的,因为这个太基础了,我们在写程序的时候,是不是会创建int型,那int型在计算机中的储存规则的原码,反码,补码(这些全部的以二进制形式表现的)。

整形有二种一种是有符号的,一种是无符号的。但是他们看起来有两种,其实区别不大,无符号的就是第一位,正常。而有符号的第一位就不一定了。0表示正,1表示负。

有点跑题了,现在我们讲数据储存,无符号的可以看为正数,而正数的原,反,补一样。

所以重点是有符号的,而正数同上。

负数首先把数值按照正负数的形式写成二进制就是原码。后面符号位不变,其他位按位取反(就是0变1,1变0)就得到了反码,再加1就是补码。而计算机储存的就是补码。

这个不难,就是不知道为什么要这么复杂,我们来说原因。因为cpu只会加法,不会减法,所以把负数变成这样就是二个数相加了。

好,下一个,大小端

我们想一想,一个int有4个字节,这4个字节在计算机里面的怎么放,是按我们正常的顺序,前面是大的位,后面小的位,还是小的位放前面,大的位放后面。这个就是大小端。

先看定义

看了下面就可以记小位在低地址是小端,大位在低地址是大端。

看我的电脑

哦,内存中是44332211,他是反过来的。首先我们要知道局部变量是在栈中储存的,而栈是向下增长,所以就是

而44是小位还是大位呢。

所以44是小位,所以小位在低地址是小端。

讲完了大小端,好不好奇原因。不好奇也要好奇。我们现实生活中都是以计算机的视角来看都是大端(但是没有高,低地址的区分)但是,我们为什么要发明小端呢,我们又不是受虐狂,没事给自己找事做。那肯定是有他的原因的。就比如你写int a = 1,如果是大端那前面是不是全部是0到好后面才有一个1,你就更难看嘛,所以小端就来了,前面就是1,不管他后面多少0,都不看。

浮点数的储存

你能看出什么,其实什么都看不出,最多看出一个浮点型和整形的储存方式不同。那就可以了。

所以,你就不会。好,现在讲嘛。

反正我感觉浮点数的储存还是蛮难记的

先记这个,你想这个V是不是就可以表示全部的浮点数了。对,可以全部表示,但是有一点特殊你不要搞一个无限或循环的小数告诉我写不出(我就直接用肢体语言告诉你)。还有一点特殊后面有。

这个

好理解,就是正负嘛。

有效数字和指数位听过没,就是科学技术法嘛,科学技术法是怎么写的987654321就写为9.87654321*10的8次方,这个也是啊。1010011101就是1.010011101*2的9次方。所以M=1.010011101,E=9.噢了。但是我们聪明的科学家想到:欸,1.010011101这个位置的数,好像一定要开头的1欸,对还是不对。那既然是这样,我们这个1就可以不写了,还能多一个位出来,一举两得。你们想一想2.5的有效数字的什么,是不是1.0101.2就是10,5就是101就是10101在加一个点。很有道理,但是错了(你会想还是好的),小数部分我们按

就好了。所以0.5就是2的负一就是1.01.

而E的话就有不同的情况了。首先E是一个无符号数,但是我们的E有时候为负的啊,因此,我们就要先给他加一个数,后面再减嘛。

还有3个特殊情况

最后一个了,就是我有了S,E,M。怎么放呢。

欧克,完美结束。

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值