浮点数全解
每种表示形式不止一种,因此制定一个标准规范:
IEE754标准
NaN(not a number):非数,即该标准不能表示的数
结构:符号位+指数+尾数
符号位:0表示正数,1为负数;
指数:偏置方式表示,即真正的指数加上一个偏置值作为该位取值;
尾数:规格化尾数最高位必须为1;即取值范围
:1.000...00~1.111...11之间;
由于小数部分第一位必须为1,所以没有必要保存该1,直接取值小数部分即可;
32位单精度浮点数偏置值为127
指数位位数:
单精度浮点数(64):8位
双精度浮点数(64位):11位
四精度浮点数(128):15位
浮点数的运算:
相加:
1.
原码
小数原码
x=0时,
[+0.0000]的原码为0.0000;
[-0.0000]的原码为1-0.0000=1.0000;
补码
1.补数
为了·实现加法器计算减法
找到一个正数代替负数实现减法运算
对其取模(即边界)得到;
在时钟转一圈计时中,选择12为模;
15点和3点均显示3点;
15%12=3;
%为取模运算符;
这样-3和+9对时钟效果相同,都回到了同一位置;
称-3是+9以12为模的补数
结论:(1).负数可以用它正补数代替
(2).一个数绝对值和他补数的绝对值和为模数;
2.一个数x的补码,n为位数:
(1)整数:
2^n>x>=0:0,x;(符号位,数值位)
0>x>=-2^n:-1,2^(n+1)+x;
例如x=-1101时;
2^5-1101=0011;
表示为:-1,0011;
(2)小数:
1>x>=0:x;
0>x>=-1:2+x;
以负数为例,x=-0.0110时,
2+x=10.0000(2的二进制表示)-0.0110=1.1010
根据补码推导原数:
当0>x>=-1:2+x时;
此时补码范围2>x>=1;
即对于小数的补码,若2>x>=1,则逆向,即减去2得到原数;
若补码为1.0101;
对于0
[+0.0000]的补码=0.0000
[-0.0000]的补码=2+(-0.0000)=10.0000-0.0000=0.0000
补码中0只有一种形式;
3.反码
整数x的反码定义:
当2^n>x>=0时;
为0,x;
当0>=x>-2^n时,
为2^(n+1)-1+x
例如x为-1101时,为(2^5-1)+x=11111-1101=1,0010
小数x的反码定义:
当1>x>=0时,为x;
当0>=x>-1时,为(2-2^(-n))+x;
其中n为小数位数
例如x=-0.0110时,反码为(2-2^(-4))+x=1.1111-0.0110=1.1001;
x=0时;
[+0.0000]的反码=0.0000;
[-0.0000]的反码=(10.0000-0.0001)-0.0000=1.1111;
可见反码的0有两种形式;
判断大于1,即1.0101-10.0000=-0.1011;