X = -5/256
Y= +59/1024
计算X-Y
阶符2位,阶码3位,数符2位,尾数9位
X = -5 x 1/256 = -5 x 2-8 = -101x 2-8 = -0.101 x 2-5 = -0.101 x 2-101
Y = 59 x 1/1024 = 59 x 2-10 = 111011x 2-10 = 0.111011 x 2-4 = 0.101 x 2-100
小阶向大阶看齐
1、求阶差
求出两个数阶的差
Ex:
E1=-101 E2=-100 (二进制)
相对应的补码(双符号)为11011, 11100
第二个补码取反为00100
得差为
11011 + 00100 = 11111
补码转为真值为11001,为-1
2、对阶
根据求出的阶差,进行阶码和尾数的移位与变换。
Ex:
根据上面Ex得出第一个阶码比第二个阶码小1
因此x=-0.101 x 2^-101^ = 11011;11.011000000 -> 11100;11.101100000
-Y = -59 x 1/1024 = -59 x 2-10 = -111011x 2-10 = -0.111011 x 2-4 = -0.111011 x 2-100
=11100;11.000101
X-Y = 11100;11.101100000 + 11100;11.000101 = 11100;10.110001000
看数符,是否要进行右规或相关操作
Ex:
这里进行右移,数符和尾数右移,阶码加一
X-Y = 11100;10.110001000 -> 11101;11.011000100
011000011
100111100
舍0进1法
恒为1法
尾数溢出可以使用规格化和舍入
阶码溢出就发生溢出了。
Ex:
最后为2^-3^x(-0.1001111)~2~
类型 | 16位机器 | 32位机器 | 64位机器 |
---|---|---|---|
char | 8 | 8 | 8 |
short | 16 | 16 | 16 |
int | 16 | 32 | 32 |
long | 32 | 32 | 64 |
long long | 64 | 64 | 64 |
float | 16 | 32 | 32 |
double | 64 | 64 | 64 |
char->int->long->double
float->double
范围、精度从小到大,转换过程没有顺手
32位
int:表示整数,范围-231~231-1
flaot:表示整数及小数,范围正负[2-126~2127x(2-2-23)],有效数字1+23=24
(1.1111111 1111111 11111111 x 2127)
int -> float 可能损失精度
float->int 可能溢出或损失精度