我们知道,整数在内存中是以补码的形式存放,其中正整数的原码反码补码相同;而负数的补码是它的反码加1.
例:
原码:0000 0000 0000 1000
反码:1111 1111 1111 0111
补码:1111 1111 1111 1000
那么浮点型呢?开局一张图
类型 | 描述 |
---|---|
float | 单精度浮点值。单精度是这样的格式,1位符号,8位指数[阶码],23位小数。 |
double | 双精度浮点值。双精度是1位符号,11位指数,52位小数。 |
以float为例描述储存过程。
- 将浮点数转化为二进制数据
- 将二进制数据转化为指数形式
- 将指数进行移为(float +127,double +2^10-1)
- 最高位表示符号,依次表示指数与尾数
如 浮点数4.5f
- 转化为二进制数据为 4->100,0.5->1====>100.1
- 转为指数形式为1.001*2^2
- 以上得到指数为2,底数为2,尾数为1.001
- 最高位表示符号,为正,所以最高位为0,中间8位表示指数,指数为2,移位后为129,用二进制表示为:10000001
- 尾数1.001因为表示成指数后第一位都是1,所以可省,只记录001,其余以0补位
- 最终结果为:01000000100100000000000000000000
- 转化为十六进制为:0x40900000