数字IC知识点总结(7)-带符号整数的运算
之前我们聊了很多的数***算的实现,但是都是无符号数,但是如果有符号怎么办呢?我们现在来说道说道。
在计算之前,我们老生常谈的说一说原码,反码和补码。首先原码就是符号位和数值位的拼接,符号位“0”代表正数,“1”代表负数。反码正数符号位为“0”后面添加绝对值的无符号数表示;负数符号位为“1”后面添加绝对值的无符号整数的各比特位取反表示。补码是正数符号位是“0”,后面添加绝对值的无符号数表示,负数符号位是“1”后面是绝对值的无符号整数的各位取反,然后还要加上1。其实这里的道理很简单,取反是因为要用溢出来实现正负加法实际上是绝对值减法,取反加一实际上就是之前的数减一,而减的这个一实际上是因为双零的缘故。
这样原本带符号数的加法,还要识别符号位再决定是加是减,如是用了补码,就简单的多了。如图便是带符号数的加法器设计
这里面为什么结果还要加一个原码变补码呢?原因是原码变补码和补码变原码设计是一样的!只使用一个设计模块正好是逻辑复用。
那要是做乘法怎么办?乘法就没这么简单了(实际上也不难)利用乘法交换律,一部分计算符号部分,另一边计算树枝部分,再把他们合起来就是了。对于除法运算也是一样的,就是有一点,余数必须是正整数。乘法器和除法器的结构如下图。
#数字芯片设计#