我尝试使用 Booth 的乘法算法将 5,793(0001 0110 1010 0001) 乘以 -26,975(1001 0110 1010 0001),但手写计算的结果与我的测试计算结果相差一位数。我又试了几次,检查了好几次,都找不到错误。
不知是不是我做Booth's Multiplication的时候还是概念错误,所以才报错
最后附上自己的计算过程,希望有好心人帮忙解决,感恩之心!
我的手写计算图: https://drive.google.com/file/d/1mnE7NU6tFQUJBeeTRE8EfMQOLU26JnN-/view?usp=sharing
https://en.wikipedia.org/wiki/Booth%27s_multiplication_algorithm#:~:text=Booth's%20multiplication%20algorithm%20is%20a,Birkbeck%20College%20in%20Bloomsbury%2C%20London.
找出在哪里可以找到我的错误。
C = 0001 0110 1010 0001 (5,793), -C = 1110 1001 0101 1111
D = 1001 0110 1010 0001 (-26,975)
C x D = ?
Step Product Next
0 0000000000000000 1001011010100001 0 10 -> sub
+1110100101011111
1110100101011111 1001011010100001
1 1111010010101111 1100101101010000 1 01 -> add
+0001011010100001
0000101101010000 1100101101010000
2 0000010110101000 0110010110101000 0 00 -> shift
3 0000001011010100 0011001011010100 0 00 -> shift
4 0000000101101010 0001100101101010 0 00 -> shift
5 0000000010110101 0000110010110101 0 10 -> sub
+1110100101011111
1110101000010100 0000110010110101
6 1111010100001010 0000011001011010 1 01 -> add
+0001011010100001
0000101110101011 0000011001011010
7 0000010111010101 1000001100101101 0 10 -> sub
+1110100101011111
1110101100110100 1000001100101101
8 1111010110011010 0100000110010110 1 01 -> add
+0001011010100001
0000110000111011 0100000110010110
9 0000011000011101 1010000011001011 0 10 -> sub
+1110100101011111
1110111101111100 1010000011001011
10 1111011110111110 0101000001100101 1 11 -> shift
11 1111101111011111 0010100000110010 1 01 -> add
+0001011010100001
0001001010000000 0010100000110010
12 0000100101000000 0001010000011001 0 10 -> sub
+1110100101011111
1111001010011111 0001010000011001
13 1111100101001111 1000101000001100 1 01 -> add
+0001011010100001
0000111111110000 1000101000001100
14 0000011111111000 0100010100000110 0 00 -> shift
15 0000001111111100 0010001010000011 0 10 -> sub
+1110100101011111
1110110101011011 0010001010000011
16 1111011010101101 1001000101000001 done
CxD = 11110110101011011001000101000001
CxD = 11110110101011111001000101000001 (test)