使用python模拟加法器的构造

使用python模拟加法器的构造

# =============================================================================
# 答疑:李立宗  lilizong@gmail.com
# 时间:2020.9.9
# 使用python构造基于门的加法器
# 拓展阅读:《编码:隐匿在计算机软硬件背后的语言》
# 第12章 二进制加法器
# =============================================================================
import random
def AND(a, b):
     return int(a and b)

def OR(a, b):
      return int(a or b)
  
def NAND(a, b):
     return int(not AND(a, b))
 
def XOR(a, b):
     return AND(NAND(a, b), OR(a, b))
 
def halfAdder(a, b):
     s = XOR(a, b)
     co = AND(a, b)
     return s, co
 
def fullAdder(a, b, ci):
     s, co1 = halfAdder(a, b)
     s, co2 = halfAdder(ci, s)
     co = OR(co1, co2)
     return s, co
 
def adder(x, y, sub): # sub=0:add, sub=1:subtract
     y = list(y)
     for i in range(len(y)):
         y[i] = XOR(sub, y[i])
     ans = [fullAdder(int(x[7]), int(y[7]), sub)]
     for i in range(6, -1, -1):
         ans.insert(0, fullAdder(int(x[i]), int(y[i]), ans[0][1]))
     ans.insert(0, (XOR(sub, ans[0][1]), None))
     for eachBit in ans:
         print(eachBit[0],end="")

def getTestString():
    s=''
    for i in range(1,9):
        c=random.randint(0,1)
        s=s+str(c)
    return s


a=getTestString()
b=getTestString()
print("数值1:%s"%a)
print("数值2:%s"%b)
print("加法:",end="")
adder(a,b,0)
print()
print("减法:",end="")
adder(a,b,1)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

superdont

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值