float

浮点数变量在计算机内存中占用4个字节(Byte), 即32-bits。目前,C/C++编译器标准都且遵循IEEE-754格式标准进行float\double运算。这种格式是一种科学计数法,用符号、指数和尾数来表示。

浮点数可以表示为:x=+-2^e*m.

float\double的具体bits分配如下:

            符号位    指数    尾数       总长度

float       1              8         23           32

double  1              11       52           64 

 

将一个float型转化为内存存储格式的步骤为:

(1)先将这个实数的绝对值化为二进制格式

(2)将这个二进制格式实数的小数点左移或右移n位,直到小数点移动到第一个有效数字的右边

(3)从小数点右边第一位开始数出二十三位数字放入第22到第0位

(4)如果实数是正的,则在第31位放入“0”,否则放入“1”

(5)如果n是左移得到的,说明指数是正的,第30位放入“1”。如果n是右移得到的或者n=0,则第30位放入“0”

(6)如果n是左移动得到的,则将n减去1后化为二进制,并在左边加“0”补足7位,放入29到23位。如果n是右移得到的或n=0,则将n化为二进制后在左边加“0”补足七位,再各位求反,再放入第29到第23位。

将一个内存存储的float二进制格式转化为十进制的步骤:

(1)将22位到第0位的二进制数写出来,在最左面补一位“1”,得到24位有效数字。将小数点点在最左边那个“1”的右边

(2)取出第29位到第23位所表示的值n。当30位是“0”时将n各位求反。当30位是“1”时将n增1

(3)将小数点左移n位(当30位是“0”时)或者右移n位(当30位是“1”时),得到一个二进制表示的实数

(4)将这个二进制实数化为十进制,并根据第31位是“0”还是“1”加上正号或负号即可。

小数的二进制表示问题:

(1)十进制整数如何转化为二进制数

      算法很简单。举个例子,11表示成2进制:

     11/2=5  ......1

      5/2=2   .......1

      2/2=1   .......0

      1/2=0..........1(0结束)

    11转化为的二进制数为1011

    这里提示一点:只要遇到除以后的结果为0了就结束了,所有的整数除以2一定能够最终得到0。所以,整数永远可以用二进制精确表示。

(2)十进制小数如何转化为二进制数

     算法是乘以2直到没有了小数为止。举个例子,0.9表示成二进制数

      0.9*2=1.8..........1

      0.8(1.8的小数部分)*2=1.6 ......1

      0.6*2=1.2...........1

      0.2*2=0.4............0

      0.4*2=0.8............0

      0.8*2=1.6.............1

      0.6*2=1.2.............1

    .  ........0.9的二进制表示为(从上往下):1110011....

     注意:上面的计算过程循环了,也就是说*2永远不可能消除小数部分,这样算法将无限下去。很显然,小数的二进制表示有时是不可能精确的。

     

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值