C语言中浮点型的存储方式

2018-05-15  本文已影响0人  郎官人

我们知道,整数在内存中是以补码的形式存放,其中正整数的原码反码补码相同;而负数的补码是它的反码加1.

例:

原码:0000 0000 0000 1000
反码:1111 1111 1111 0111
补码:1111 1111 1111 1000 

那么浮点型呢?开局一张图

类型 描述
float 单精度浮点值。单精度是这样的格式,1位符号,8位指数[阶码],23位小数。 image
double 双精度浮点值。双精度是1位符号,11位指数,52位小数。 image

以float为例描述储存过程。

  1. 将浮点数转化为二进制数据
  2. 将二进制数据转化为指数形式
  3. 将指数进行移为(float +127,double +2^10-1)
  4. 最高位表示符号,依次表示指数与尾数

如 浮点数4.5f

  1. 转化为二进制数据为 4->100,0.5->1====>100.1
  2. 转为指数形式为1.001*2^2
  3. 以上得到指数为2,底数为2,尾数为1.001
  4. 最高位表示符号,为正,所以最高位为0,中间8位表示指数,指数为2,移位后为129,用二进制表示为:10000001
  5. 尾数1.001因为表示成指数后第一位都是1,所以可省,只记录001,其余以0补位
  6. 最终结果为:01000000100100000000000000000000
  7. 转化为十六进制为:0x40900000
上一篇 下一篇

猜你喜欢

热点阅读