熬,数据储存


前言

  本章主要介绍,三码,大小端相关的知识。

一、 三码是什么

  三码是指,原码,反码,补码。因为计算机只认识0,1组成的代码,于是乎,二进制是广泛应用的一种进制,“遇2进1”,而数据在计算机是以补码的形式存在的。

  下面来介绍一下,三码之间的关系。

  首先,说明一下符号位,有符号整数最高位是符号位

  正数的三码相等,不需要过多考虑。

  重点在于负数,对于负数来说,反码就是原码除符号位外其他位按位取反,补码 = 反码 + 1

  在这里我们把数字分为两部分,整型浮点型

  1.整数的储存

  首先,我们日常生活中经常使用10进制,那么你知道怎样吧10进制转换成2进制吗?答案很简单,拿2除不就完了(这里的除是取整的除,知道为0结束,然后反向书写),举个例子,在这里,引用《孤注一掷》潘生的一个手势---6,实际上,将这个6换成二进制,恰好是110(这里我就不写那么多位了,不好看),正数的符号位0,负数的符号位1。

  提问:-5的原码,反码,补码是(8bit)

answer:

原码:10000101

反码:111111010

补码:111111011 

这只是正数的三码而已,事实上在32位电脑上应该有32bit,对于不同类型的数据,去相应的字节长度即可。

2.浮点型的储存

  提到浮点数的储存,就不得不说IEEE 754了

本图来自知乎

  这些个大牛说:

  对于32位的浮点数,最高的1位储存符号位S,接着8位储存指数E,剩下的23位储存有效数字M(本人手绘,有亿点难看)

  对于64位的浮点数,则为1,11,52;

  值得注意的是M和E

  M在储存的时候不会存储整数部分,只是储存小数点之后的内容,这样的话,可以节省一个有效数字,相当于多保存了一位,更加精确

  E是一个无符号整数,8bit范围是0到255,11位就是0到2047,所以IEEE规定E需要加上一个中间值,对于8bit,这个数是127,11bit则是1023.如果E全为0,那么这是一个很小的数,取出时,M不再加上1,而是0。



二、大小端

    1.是什么

  大端模式:数据的低位字节内容保存在内存的高地址处,数据的高位字节内容保存在内存的低地址处。

  小端模式:数据的低位字节内容保存在内存的低地址处,数据的高位字节内容保存在内存的高地址处。

内存是这样的: 

本人使用的是vs2022,可以看出这个编译器采用了小端。

  2.咋来的

  数据类型不同,有int,char,float等等等等,char类型是一个字节,8个bit,而int则是4个字节,32个bit。通俗一点,既然字节变多了,自然就要用一定的方式储存起来,于是就有了大小端。为了我们储存的效率,故不采用复杂的储存方式,一般采取大小端(主要是咱没见过其他的,如果有的话,一定要踢我一下)。


总结

  今天这个博客,是我亲手写的第一遍博客,说实话,真的写的很差劲,但我还是想要发出来,希望,有人能给我提出建议,我能更好的进步。谢谢你了,陌生人,真的谢谢。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值