整数在内存中的存储
整数二进制的表示方式有三种:原码 反码 补码
三种表示方式均有符号位和数值位两部分,符号位0为正
要区分正数和负数
正整数的原 反 补码都相同
负整数的三种表示方法各不相同
对于整型来说:数据存放内存中其实存放的是补码
原因:1.可以将符号位和数值域统一处理
2.补码和原码可统一处理,互相转换,运算过程是相同的,不需要额外硬件电路
大小端字节序和字节序判断
可以发现:
1. 为了方便,显示的是16进制
2.倒着存的,为小端存储
大小端
字节在内存中存储时存在着存储顺序的问题,分为大端和小端存储模式
大端:低字节保存在高地址位置
小端:低字节保存在低地址位置
为什么有大小端之分呢?
原因:计算机系统以字节为单位,每个地址单元都对应一个字节,由于寄存器宽度大于一个字节,
存在将多个字节安排的问题,我们常用的x86结构是小端模式,而KEIL C51为大端模式,
有些ARM处理器还可以由硬件来选择是大端模式还是小端模式。
练习
//做题ing,会在周四之前,整理出一些好题补充~
浮点数在内存中的存储
说明了整数和浮点数在内存中的存储不一样
浮点数的存储
举例来说:
十进制的5.0,写成二进制是101.0,相当于1.01*2^2
S=0,M=1.01,E=2
0.1表示2^(-1)==0.5
关于M:
1<=M<2,也就是说M可以写成1.XXXXXX的形式,因为默认第一位总是1,因此可以被舍去,比如保存1.01时,只保存01,等到读取的时候,再把第一位的1加上去,这样就可以多保留1位有效数字了
关于E:
E是一个无符号整数
浮点数的取出
E的计算值-127/1023得到真实值,再将有效数字M前加上第一位的1
特殊情况:
E全为0,+127还这么小,说明是一个接近于0的很小的数字
E全为1,+127,八位全为1,能表示的最大值为255,说明E为128,一个超级大的数
回到一开始,来思考一下这串代码的输出值
按照int整型储存
按照S E M 来判断浮点数,E为全0,说明是一个趋近于0的极小的数,所以输出0.000000
按照浮点数储存
(E要加上127的
正整型的补码就是原码,转化成十进制为1091567616
因为浮点数的储存是S E M型,不同的存储方式导致了读取时的不同
//都看到这里啦,留下一个赞再走叭