目录
1.整型在内存中的存储
大小端字节序存储和字节序判断
1.大小端字节序存储:
2.字节序判断:
2.浮点数在内存中的存储
浮点数存储的过程
浮点数读取的过程
题目解析
1.整型在内存中的存储
我们先要明白:
整数在内存中是以二进制形式进行存储的,而整数的二进制表示方法有三种——原码、反码和补码,而整数在内存中存储的就是二进制的补码。
正整数的原码、反码和补码都相同
负数的三种表示方法各不相同
原码:直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码:反码+1就得到补码
既然我们已经知道整数在内存中是以二进制的补码进行存储的,那我们不妨看一下下面这段代码:
(注:0x开头表示十六进制)如上图:我们发现变量a是“倒着”存进内存中的,这是为什么呢?——这就不得不讲到我们的大小端字节序存储了。
当我们创建一个变量a并将“0x11223344”赋给它并存进内存时,我们好像有两种存储的方法——正着存进去(即11223344)或是倒着存进去(即44332211),如图:
而我们刚刚那段代码就是小端字节序存储,因此是“倒着”存放进内存中的。
由这段代码我们引出了一个新的东西——大小端字节序
大小端字节序存储和字节序判断
1.大小端字节序存储:
当超过一个字节的数据在内存中存储的时候,显而易见会出现存储顺序的问题,而按照不同的存储顺序,我们又分为大端字节序存储和小端字节序存储,具体概念如下:
大端字节序存储:
数据的低位字节内容保存在内存的⾼地址处,⽽数据的⾼位字节内容,保存在内存的低地址处
数据的低位字节内容保存在内存的低地址处,⽽数据的⾼位字节内容,保存在内存的⾼地址处
2.字节序判断:
我们先看一道百度笔试题:
再来一题:
请问该代码的输出结果是什么?
如图:,我们发现输出来是一个极大的数字,这就不得不通过观察它的内存存储情况来判断为什么是这个数了,如图:
2.浮点数在内存中的存储
我们首先来看一道例题:
输出结果如下:
输出结果可能跟我们所想的略有差别,这是为什么呢?——这就跟浮点数在内存中的存储有关了。
浮点数的存储方式如下:
因此浮点数的存储,存的就是S、M、E相关的值。
我们以5.5为例,其写成二进制是101.1,因此S = 0,M = 1.01 ,E = 2.
则它在内存中的存储如图:
浮点数存储的过程
如图:
简单来讲就是M存储时默认第一位总是1因此舍去,这样可以节省一位有效数字
而E为了防止其出现负数会加一个中间值
浮点数读取的过程
浮点数读取时M和S都可以正常读取,但E有特殊情况,如图:
题目解析
浮点数在内存中的存储我们已经基本讲解完了,那么我们回到开头的题目——看看它为什么是那样输出的吧。
如图:
完结撒花啦,如果觉得博主写的还过得去的话给个免费的三连吧亲🌼🌼