原码的一位乘法和两位乘法

x33g5p2x  于2021-09-24 转载在 其他  
字(0.8k)|赞(0)|评价(0)|浏览(550)

原码一位乘法

运算规则:

1,符号位通过对被乘数和乘数的符号位作异或得到,不参与乘法运算。

2,数值部分使用被乘数和乘数的绝对值进行运算。

3,一共要经过n次加法和n次右移位。(n指的是乘数小数点后的位数,即尾数的位数,如 0.1101,小数点后有4位,n就等于4)。

4,移位时进行的是逻辑移位,右移后空出的位置补0。

举例说明:

设 x = -0.1101,y = +0.1011,使用原码一位乘法求 x /* y。

符号位:p = 1⊕0 = 1;

所以 x /* y = 1.10001111。

原码两位乘法

运算规则:

1,符号位通过对被乘数和乘数的符号位作异或得到,不参与乘法运算。

2,数值部分使用被乘数和乘数的绝对值的补码进行运算。移位时进行的是算数移位

3,部分积和被乘数x均采用三位符号位,乘数末尾会加上一个标志位C,C的初始值为0。

4,运算时乘数的符号位取决于其尾数位数的奇偶性,若尾数的位数是偶数,则使用双符号位,计算时最后一步不移位。若尾数的位数为奇数,则使用单符号位,计算时最后一步要移一位

如乘数0.0110,尾数有4位,为偶数,所以使用双符号位00.0110;
如乘数0.101,尾数有3位,为奇数,所以使用单符号位0.101。

5,若乘数尾数位数为偶数 n,一共要移位 n/2 次;若乘数尾数位数为奇数 n,则加上最后一次移一位的操作一共要移位 (n+1)/2

6,运算时每次要判断乘数的后两位和标志位C,根据三位的数值来确定操作内容

判断依据:

举例说明:

1,设 x = 0.111111,y = -0.111001,使用原码两位乘法求解 [x /* y]原码。

|x|补码=0.111111,|y|补码=0.111001,(-|x|)补码=1.000001

符号位:p = 1⊕0 = 1;

所以 [x /* y]原码 = 1.111000000111。

2,设 x = 0.011, y = 0.011,使用原码两位乘法求解 [x /* y]原码。

|x|补码 = 0.011,|y|补码 = 0.011,(-|x|)补码 = 1.101。

符号位:p = 0⊕0 = 0;

所以 [x /* y]原码 = 0.001001。

相关文章