2.3.5 补码乘法
目录
P68
在图2-27中,为什么无符号数的二进制相乘等于\(x\cdot y\)的二进制,而补码这三行就不一定?这是因为补码是人为规定的一种表示方法,不一定符合数的运算逻辑;而无符号数的本质实际上就是十进制数的二进制表示,无论是十进制数相乘还是二进制数相乘,最后得到的结果都是一样的;但是补码却不是负数的二进制表示(比如说\(-4\)的二进制表示应该是-100
,\(-1\)的二进制表示应该是-001
,于是\(-4\times(-1)=4\)的二进制表示就是100*001
,即100
)。如果要保证计算正确,就是先按照十进制计算,然后最后转化成结果的补码(当然机器内部执行乘法不是像执行加法那么简单,好像有一个比较复杂的算法,反正最终得出的结果就是按照十进制相乘再转换成补码)
补码这么设计,就是为了加法的方便,所以加法可以直接相加,最后加出来的二进制就是对应结果的补码表示(当然对于负数来说,也不是他的二进制表示,而只是他的补码表示)