c-04 CPU基本运算与补码

    技术2026-03-26  12

    现代计算机cpu只能进行逻辑运算,即 与,或,非,异或,左移 右移。关于这块的具体原因可以Google搜索逻辑门等相关电路学科知识。 那么我们所有的加减乘除都必须使用上述上个基本逻辑去完成。而补码的出现就是为了辅助计算。

    补码其实跟c语言无关,但是是因为学c语言期间学的所以记录下。

    如何使用基本逻辑运算完成加法运算?

    假设我们存在两个数据:A = 1,B = 1。(注意这里的1是二进制,也就是A+B=10) 在计算机计算A+B:

    进位部分 对A和B进行逻辑与操作,那么本案例中:A与B=1所以进位部分为1基数部分 对A和B进行逻辑异或操作,那么本案例中:A与B=1,所以基础部分为0

    所以结果为 进位部分+基数部分=10

    如何使用基本逻辑运算完成减法运算?

    对于 4个bit 数值我们假设数据为A = 0010 B = 0001, 在计算机做计算A-B

    因为 B+~B=FF ( ~ B)表示对B求反 所以: B+~B + 1 = 100 ~B+1=100-B

    所以最终:A+(~B+1)-100=A-B

    但是上述等式中存在一个问题,-100不是还是减法吗? 虽然-100是减法但是我们可以把它当成4Bit字节做加法运算时视为抛弃最高位进位即可。所以我们计算机存储一个数据时,既然不考虑最高位拿就直接拿去作为判断数据正负的依据。

    综上述: A-B= A +(~B+1)

    (~B+1)我们称为B的补码.所以补码存在的作用之一就是可以用于负数直接相加。

    回到我们A-B的案例: 我们先求出B的补码: B首先取反:得到1110 然后加1:得到1111

    最后 A的二进制加1111 的结果:0010+1111 = 10001 最后最高位舍去进位:0001

    另外补码可以这样计算. 求4比特的Z的补码,当前Z等于7 Z无符号数最大范围为15(`4比特) 那么: 补(Z)=15-7+1=9

    上面的公式就是: 补(Z)= 最大无符号数值-Z+1

    简单推导方式就是: 补(Z)= ~Z+1

    Z+~Z=F

    ~Z=F-Z

    等式带入即可

    如何使用基本逻辑运算完成除法运算?

    假设 A/C ,A=00101,B=010011.

    首先我们需要知道一个知识点:一个数据除以 2^n 就是二进制位向左移动n位。

    所以上述计算:

    B = 10000 + 10+1 B = 2^4 + 2^1 +2^0 所以 A/C=A无符号右移5位即可,所以A/C=0

    如何使用基本逻辑运算完成乘法运算?

    由于和除法法类似不作讲解

    二进制的奥秘:用逻辑运算实现加减法

    Processed: 0.011, SQL: 9