一、整形在内存中的存储

数据在内存中是以二进制补码的形式存储的 。下面来介绍原码、反码、补码的概念。
正数的原码、反码、补码相同。
负数求值如下:
原码
直接将数值按照正负数的形式翻译成二进制就可以得到原码。
反码
将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码
反码 +1 就得到补码。

eg:
由上图可知:整形在内存中是以补码的形式存储的,但是实际在内存中的顺序是不一样的。
原因是:按照小端存储的,什么是小端?
由图可知小端为:二进制底权放入低地址处高权放在高地址处。
但是取出用的时候是二进制补码
既然了解了小端,那么大端又是怎么样的呢?
大端与小端相反,它是底权放入高地址处高权放在低地址处。
二、浮点数在内存中的存储
任意一个二进制浮点数V可以写成如下形式:
(-1)^S * M * 2^E
(-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。
M表示有效数字,大于等于1,小于2。
2^E表示指数位。
以浮点数5.5何-5.5为例:

IEE754规定:
32位的时候是这样存储的:
64位的时候是这样存储:
S、E、M的值又是怎么确定的呢?
M是去掉小数点前面的一保留小数点后面的二进制数。为什么这么做呢?
答:是节省 1 位有效数字。以 32 位
浮点数为例,留给 M 只有 23 位,
将第一位的 1 舍去以后,等于可以保存 24 位有效数字,这样就可以更精确了。
IEEE754规定 :1<= M <2 。
对于E的在内存中的存储比较麻烦。
首先, E 为一个无符号整数( unsigned int )
这意味着,如果 E 为 8 位,它的取值范围为 0~255 ;如果 E 为 11 位,它的取值范围为 0~2047 。
但是,我们 知道,科学计数法中的E 是可以出 现负数的,所以IEEE 754 规定,存入内存时 E 的真实值必须再加上一个中间数,对于 8 位的 E ,这个中间数 是127 ;对于 11 位的 E ,这个中间 数是1023 。
比如,2^3 的 E 是3 ,所以保存成 32 位浮点数时,必须保存成3 +127=130 ,即 10000010。
取出又分为三种情况:
E 不全为 0 或不全为 1

E 全为 0
这时,浮点数的指数 E 等于 1-127 (或者 1-1023 )即为真实值,
有效数字 M 不再加上第一位的 1 ,而是还原为 0.xxxxxx 的小数。这样做是为了表示 ±0 ,以及接近于
0 的很小的数字。
0 01111110 00000000000000000000000
E 全为 1
这时,如果有效数字 M 全为 0 ,表示 ± 无穷大(正负取决于符号位 s );
看下面的例题: