这一章,主要介绍了好多种计算方法。下面,写一点自己对于有些计算(手写计算过程)的见解。
- 1.原码、反码、补码
原码:相信大家都会写,符号位在前二进制数值在后,凑够位数即可。
反码:原码符号位不变,其他位全部取反。
补码:反码末位加一 / 原码符号位不变,从右往左数第一个1及其右边的各位不变,其余位全部取反
- 2.IEEE754的转换
IEEE754标准32/64浮点规格化数形式:X = (-1)S * 1.M * 2E-127(其中,S-阶符,M-尾数,E-阶码)
32位的规格化浮点数:SEM00000...(即二进制SEM后面补0,写够32位)
以27/64为例:
①化形式:27/64 = + (1.1011)2 * 2-2
②找SEM:S=0,M=1011,E=(125)10=(01111101)2
③写结果:00111110 11011000 00000000 00000000 = (3ED800)16
- 3.变形补码计算加减法
变形补码没什么稀奇,不过是符号位变成两位而已(00为正,11为负),它的价值在于可以作溢出判断(结果00//11表示未溢出,01-上溢(所谓上溢符号位还是0),11-下溢(下溢符号位还是1)),就正常求补码(符号位double),放在一起加和,做溢出判断,最后别忘了把补码再转换回原码作为最终结果。
x+y:
以x=11011, y=00011为例:
①求补:[11011]补=0011011, [00011]补=0000011
②加和:011011 + 000011 = 0011110;符号位00,未溢出,故x+y=11110
x-y:(这里把减法化为加法,即 x-y = x+(-y),另外[-y]补 = [y]补 从右往左数第一个1及其右边的各位不变,其余位全部取反,这次连带符号位也要取反)
以x=11011, y=-11111为例:
①求补:[11011]补=0011011, [-11111]补=1100001,[-y]补=0011111
②加和:[x]补+[-y]补 = 0011011 + 0011111 = 0111010;符号位01,正溢(上溢);故x-y=+111010
- 4.浮点数加减法(我用的是补码计算)
这里面涉及的东西比较多,每一步都需要仔细,错一步结果就错了。
①求补对阶
②尾数求和
③规格化
④舍入处理
⑤溢出判断
⑥写结果
例子后面给