3.7.4 整数加减运算
2025年09月26日
3.7.4 整数加减运算
无符号数和带符号数的加减运算电路是一样的,它们的运算如图3.4所示。
图3.4 整数加减运算器
在图3.4中MUX 是一个二路选择器。X 和Y 是两个二进制数,带符号整数和无符号整数是有区别的。对于带符号整数x 和y,X 和Y 表示x 和y 的补码;而对于无符号整数x和y,X 和Y 表示x 和y 本身。减法运算都是用加法的补码来实现。y 的补码为+1,因此要先对各位取反,即用图中的反相器来实现,然后经过2选1多路选择器MUX,上方的控制端C 用来选择将原变量还是反变量输送到加法器中。当C 为0时做加法,即x+y=X+Y,当C 为1时做减法,即x-y=X+
+1。
【例3.14】 C语言程序,计算一个数组a中每个元素的和。当参数len为0时,返回值应该是0,但是计算机执行时,结果为访问异常。这是什么原因造成的?
解:当len 为0 时,在 图3.4 的 电 路 中 计 算len-1,此 时X 为00000000 H,Y 为00000001H,C=1,因此结果为32个1。由于len是unsigned类型,任何无符号数都比32个1小,因此循环体一直在执行,最终导致了访问异常。改进方法是将len声明为int型。
总结一下无符号数和带符号数的加减运算公式。