这一章,主要介绍了好多种计算方法。下面,写一点自己对于有些计算(手写计算过程)的见解。


 

  • 1.原码、反码、补码

  原码:相信大家都会写,符号位在前二进制数值在后,凑够位数即可。

  反码:原码符号位不变,其他位全部取反。

  补码:反码末位加一 / 原码符号位不变,从右往左数第一个1及其右边的各位不变,其余位全部取反

  • 2.IEEE754的转换

  IEEE754标准32/64浮点规格化数形式:X = (-1)* 1.M * 2E-127(其中,S-阶符,M-尾数,E-阶码)

    32位的规格化浮点数:SEM00000...(即二进制SEM后面补0,写够32位)

  以27/64为例:

    ①化形式:27/64 = + (1.1011)* 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.浮点数加减法(我用的是补码计算)

  这里面涉及的东西比较多,每一步都需要仔细,错一步结果就错了。

  ①求补对阶

  ②尾数求和

  ③规格化

  ④舍入处理

  ⑤溢出判断

  ⑥写结果

例子后面给