计组第二章浮点数运算难点part1

⚠️难点 1. 无符号数的机器数
无符号数因为没有符号,所以他的机器数就是他本身,
如1110 0000,那么机器数也是1110 0000。
两个无符号数做减法运算
x-y,那么把y整体取反+1,变成y‘和x相加
如果产生了进位,则进位直接舍弃。

有意思的是,当你printf输出时,如果输出为无符号数,则8位数字变成十进制输出。如果输出为有符号数,则第八位数字为符号位。你说你存的时候是无符号数,计算机说,get了,把它八位存进去,不够的我就补0,补成8位。后来你取它时,忘了它是有符号数还是无符号数,于是你认为是有符号数,于是他就把第八位当作符号位,给输出。

因此有符号数的补码(机器数)1100 1111=-49
无符号数的的机器数为1100 1111=207
而49+207=256=2^8
因此如果讲有符号数转换为无符号数,看看表示一个数用几位,如果是8位,即2^8-有符号数的真值的绝对值。

⚠️难点2.IEEE754标准的浮点数
0b1100=1.12^3
单精度阶码E=1到256,E-127=-126到127
所以单精度最小正数:1.0
2^(-126)
最大正数1.1111 1111 1111 1111 1111 1112127=2127(2-2^-23)

若是0000 0000 0000…0000,那么真值为0
若是0011 1111 1000 0000…0000,那么真值为正无穷

⚠️注意,由于IEEE的阶码一般用移码表示,因为对于那八位阶码是无符号数,直接计算8位的二进制数。

0b1000 0000 0100 0000 …0000
E=0,但E的取值应该是1-254没有0,所以拿隐藏的1顶上去,即0.1*2-126=2-127

⚠️难点3
1111
222*2=2^4=16
1+2+4+8=15
即2^4-1

⚠️难点4
整数换算成浮点数,先把它换算成二进制数
-68=1000100

⚠️难点5
IEEE单精度浮点数对于尾数的取值为23位,但由于规定隐藏了一个1,因此可以表示24位数,即最大是
1.11…1111(共24个1)
如果尾数超过了24位,就需要进位。
对于1.111…111(24个1)而言,进位,会使阶码加1,若阶码此时为111111110(在机器中的表示)(阶码不能全1,不能全0)
即为2^8-1-1-127=127
那么舍弃24位以后的尾数进1,会引起溢出

因此我们可以看到加减法运算,尾数溢出不是真的溢出,而阶码溢出为真的溢出

⚠️难点6
float型变量在计算机中都被表示成IEEE 754单精度格式
机器补码浮点运算规则是阶符2 阶码3 数符2 尾数9
运算的时候,需要将数符也参与运算

⚠️难点7
浮点数溢出问题

  1. 阶码上溢出,如IEEE表示的浮点数中,阶码部分的值为11111111,如果数为正数,就是+∞,如果数为负数,就是-∞。这种为软件故障
  2. 阶码下溢出,如IEEE表示的浮点数中,阶码部分的值为000000,就是下溢出,则置值为0,不发生溢出故障

⚠️难点8
在IEEE中,容易遗忘的一点,偏移量的设置,单精度为127,双精度为1023
这个设置是这么来的
8位表示阶码,那么偏移量的值为2^7-1

⚠️难点9
原码补码反码的表示范围最好是要记清楚,这样可以省下很多的时间
🎈小数 字长为n+1(表示包含符号)
原码的表示范围=反码的表示范围
-(1-2n)~1-2n

补码-1~1-2^n

🎈整数 字长为n+1(包含符号)
原码的表示范围=反码的表示范围
-(2n-1)~2n-1

补码-2n~2n-1

补码为啥那么反常呢,因为补码的+0和-0都为0.000

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值