Python——二进制16位加法器(采用手算二进制加法的过程实现)(tkinter实现)
本功能作者:
1.CSDN用户(TDTX),TDTX主页
博客园用户(TDTX),TDTX主页
2.CSDN用户(philo42),philo42主页——负责示意图绘制
1.add16bit.py
def add16bit():
import tkinter as tk
wind1=tk.Tk()
wind1.geometry('620x550+800+300')
wind1.title('十六位加法器')
def add1616bit():
nu1_1=eval(ent16.get()) #获得文本框中的数字存入相应的变量中
nu1_2=eval(ent15.get())
nu1_3=eval(ent14.get())
nu1_4=eval(ent13.get())
nu1_5=eval(ent12.get())
nu1_6=eval(ent11.get())
nu1_7=eval(ent10.get())
nu1_8=eval(ent9.get())
nu1_9=eval(ent8.get())
nu1_10=eval(ent7.get())
nu1_11=eval(ent6.get())
nu1_12=eval(ent5.get())
nu1_13=eval(ent4.get())
nu1_14=eval(ent3.get())
nu1_15=eval(ent2.get())
nu1_16=eval(ent1.get())
nu2_1=eval(ent32.get())
nu2_2=eval(ent31.get())
nu2_3=eval(ent30.get())
nu2_4=eval(ent29.get())
nu2_5=eval(ent28.get())
nu2_6=eval(ent27.get())
nu2_7=eval(ent26.get())
nu2_8=eval(ent25.get())
nu2_9=eval(ent24.get())
nu2_10=eval(ent23.get())
nu2_11=eval(ent22.get())
nu2_12=eval(ent21.get())
nu2_13=eval(ent20.get())
nu2_14=eval(ent19.get())
nu2_15=eval(ent18.get())
nu2_16=eval(ent17.get())
nusp1=0 #nusp1~16是结果输出8个框中,每一位上的值
nusp2=0
nusp3=0
nusp4=0
nusp5=0
nusp6=0
nusp7=0
nusp8=0
nusp9=0
nusp10=0
nusp11=0
nusp12=0
nusp13=0
nusp14=0
nusp15=0
nusp16=0
nujw=0 #nujw是两个数每一位作二进制加法时,产生的进位值
#下面是手工计算二进制加法的过程实现
if nu1_1+nu2_1+nujw==1:
nusp1=1
nujw=0
tx1.insert('insert',nusp1)
tx1.insert('insert','\n')
elif nu1_1+nu2_1+nujw==0:
nusp1=0
nujw=0
tx1.insert('insert',nusp1)
tx1.insert('insert','\n')
elif nu1_1+nu2_1+nujw==2:
nusp1=0
nujw=1
tx1.insert('insert',nusp1)
tx1.insert('insert','\n')
elif nu1_1+nu2_1+nujw==3:
nusp1=1
nujw=1
tx1.insert('insert',nusp1)
tx1.insert('insert','\n')
if nu1_2+nu2_2+nujw==1:
nusp2=1
nujw=0
tx2.insert('insert',nusp2)
tx2.insert('insert','\n')
elif nu1_2+nu2_2+nujw==0:
nusp2=0
nujw=0
tx2.insert('insert',nusp2)
tx2.insert('insert','\n')
elif nu1_2+nu2_2+nujw==2:
nusp2=0
nujw=1
tx2.insert('insert',nusp2)
tx2.insert('insert','\n')
elif nu1_2+nu2_2+nujw==3:
nusp2=1
nujw=1
tx2.insert('insert',nusp2)
tx2.insert('insert','\n')
if nu1_3+nu2_3+nujw==1:
nusp3=1
nujw=0
tx3.insert('insert',nusp3)
tx3.insert('insert','\n')
elif nu1_3+nu2_3+nujw==0:
nusp3=0
nujw=0
tx3.insert('insert',nusp3)
tx3.insert('insert','\n')
elif nu1_3+nu2_3+nujw==2:
nusp3=0
nujw=1
tx3.insert('insert',nusp3)
tx3.insert('insert','\n')
elif nu1_3+nu2_3+nujw==3:
nusp3=1
nujw=1
tx3.insert('insert',nusp3)
tx3.insert('insert','\n')
if nu1_4+nu2_4+nujw==1:
nusp4=1
nujw=0
tx4.insert('insert',nusp4)
tx4.insert('insert','\n')
elif nu1_4+nu2_4+nujw==0:
nusp4=0
nujw=0
tx4.insert('insert',nusp4)
tx4.insert('insert','\n')
elif nu1_4+nu2_4+nujw==2:
nusp4=0
nujw=1
tx4.insert('insert',nusp4)
tx4.insert('insert','\n')
elif nu1_4+nu2_4+nujw==3:
nusp4=1
nujw=1
tx4.insert('insert',nusp4)
tx4.insert('insert','\n')
if nu1_5+nu2_5+nujw==1:
nusp5=1
nujw=0
tx5.insert('insert',nusp5)
tx5.insert('insert','\n')
elif nu1_5+nu2_5+nujw==0:
nusp5=0
nujw=0
tx5.insert('insert',nusp5)
tx5.insert('insert','\n')
elif nu1_5+nu2_5+nujw==2:
nusp5=0
nujw=1
tx5.insert('insert',nusp5)
tx5.insert('insert','\n')
elif nu1_5+nu2_5+nujw==3:
nusp5=1
nujw=1
tx5.insert('insert',nusp5)
tx5.insert('insert','\n')
if nu1_6+nu2_6+nujw==1:
nusp6=1
nujw=0
tx6.insert('insert',nusp6)
tx6.insert('insert','\n')
elif nu1_6+nu2_6+nujw==0:
nusp6=0
nujw=0
tx6.insert('insert',nusp6)
tx6.insert('insert','\n')
elif nu1_6+nu2_6+nujw==2:
nusp6=0
nujw=1
tx6.insert('insert',nusp6)
tx6.insert('insert','\n')
elif nu1_6+nu2_6+nujw==3:
nusp6=1
nujw=1
tx6.insert('insert',nusp6)
tx6.insert('insert','\n')
if nu1_7+nu2_7+nujw==1:
nusp7=1
nujw=0
tx7.insert('insert',nusp7)
tx7.insert('insert','\n')
elif nu1_7+nu2_7+nujw==0:
nusp7=0
nujw=0
tx7.insert('insert',nusp7)
tx7.insert('insert','\n')
elif nu1_7+nu2_7+nujw==2:
nusp7=0
nujw=1
tx7.insert('insert',nusp7)
tx7.insert('insert','\n')
elif nu1_7+nu2_7+nujw==3:
nusp7=1
nujw=1
tx7.insert('insert',nusp7)
tx7.insert('insert','\n')
if nu1_8+nu2_8+nujw==1:
nusp8=1
nujw=0
tx8.insert('insert',nusp8)
tx8.insert('insert','\n')
elif nu1_8+nu2_8+nujw==0:
nusp8=0
nujw=0
tx8.insert('insert',nusp8)
tx8.insert('insert','\n')
elif nu1_8+nu2_8+nujw==2:
nusp8=0
nujw=1
tx8.insert('insert',nusp8)
tx8.insert('insert','\n')
elif nu1_8+nu2_8+nujw==3:
nusp8=1
nujw=1
tx8.insert('insert',nusp8)
tx8.insert('insert','\n')
if nu1_9+nu2_9+nujw==1:
nusp9=1
nujw=0
tx9.insert('insert',nusp9)
tx9.insert('insert','\n')
elif nu1_9+nu2_9+nujw==0:
nusp9=0
nujw=0
tx9.insert('insert',nusp9)
tx9.insert('insert','\n')
elif nu1_9+nu2_9+nujw==2:
nusp9=0
nujw=1
tx9.insert('insert',nusp9)
tx9.insert('insert','\n')
elif nu1_9+nu2_9+nujw==3:
nusp9=1
nujw=1
tx9.insert('insert',nusp9)
tx9.insert('insert','\n')
if nu1_10+nu2_10+nujw==1:
nusp10=1
nujw=0
tx10.insert('insert',nusp10)
tx10.insert('insert','\n')
elif nu1_10+nu2_10+nujw==0:
nusp10=0
nujw=0
tx10.insert('insert',nusp10)
tx10.insert('insert','\n')
elif nu1_10+nu2_10+nujw==2:
nusp10=0
nujw=1
tx10.insert('insert',nusp10)
tx10.insert('insert','\n')
elif nu1_10+nu2_10+nujw==3:
nusp10=1
nujw=1
tx10.insert('insert',nusp10)
tx10.insert('insert','\n')
if nu1_11+nu2_11+nujw==1:
nusp11=1
nujw=0
tx11.insert('insert',nusp11)
tx11.insert('insert','\n')
elif nu1_11+nu2_11+nujw==0:
nusp11=0
nujw=0
tx11.insert('insert',nusp11)
tx11.insert('insert','\n')
elif nu1_11+nu2_11+nujw==2:
nusp11=0
nujw=1
tx11.insert('insert',nusp11)
tx11.insert('insert','\n')
elif nu1_11+nu2_11+nujw==3:
nusp11=1
nujw=1
tx11.insert('insert',nusp11)
tx11.insert('insert','\n')
if nu1_12+nu2_12+nujw==1:
nusp12=1
nujw=0
tx12.insert('insert',nusp12)
tx12.insert('insert','\n')
elif nu1_12+nu2_12+nujw==0:
nusp12=0
nujw=0
tx12.insert('insert',nusp12)
tx12.insert('insert','\n')
elif nu1_12+nu2_12+nujw==2:
nusp12=0
nujw=1
tx12.insert('insert',nusp12)
tx12.insert('insert','\n')
elif nu1_12+nu2_12+nujw==3:
nusp12=1
nujw=1
tx12.insert('insert',nusp12)
tx12.insert('insert','\n')
if nu1_13+nu2_13+nujw==1:
nusp13=1
nujw=0
tx13.insert('insert',nusp13)
tx13.insert('insert','\n')
elif nu1_13+nu2_13+nujw==0:
nusp13=0
nujw=0
tx13.insert('insert',nusp13)
tx13.insert('insert','\n')
elif nu1_13+nu2_13+nujw==2:
nusp13=0
nujw=1
tx13.insert('insert',nusp13)
tx13.insert('insert','\n')
elif nu1_13+nu2_13+nujw==3:
nusp13=1
nujw=1
tx13.insert('insert',nusp13)
tx13.insert('insert','\n')
if nu1_14+nu2_14+nujw==1:
nusp14=1
nujw=0
tx14.insert('insert',nusp14)
tx14.insert('insert','\n')
elif nu1_14+nu2_14+nujw==0:
nusp14=0
nujw=0
tx14.insert('insert',nusp14)
tx14.insert('insert','\n')
elif nu1_14+nu2_14+nujw==2:
nusp14=0
nujw=1
tx14.insert('insert',nusp14)
tx14.insert('insert','\n')
elif nu1_14+nu2_14+nujw==3:
nusp14=1
nujw=1
tx14.insert('insert',nusp14)
tx14.insert('insert','\n')
if nu1_15+nu2_15+nujw==1:
nusp15=1
nujw=0
tx15.insert('insert',nusp15)
tx15.insert('insert','\n')
elif nu1_15+nu2_15+nujw==0:
nusp15=0
nujw=0
tx15.insert('insert',nusp15)
tx15.insert('insert','\n')
elif nu1_15+nu2_15+nujw==2:
nusp15=0
nujw=1
tx15.insert('insert',nusp15)
tx15.insert('insert','\n')
elif nu1_15+nu2_15+nujw==3:
nusp15=1
nujw=1
tx15.insert('insert',nusp15)
tx15.insert('insert','\n')
if nu1_16+nu2_16+nujw==1:
nusp16=1
nujw=0
tx16.insert('insert',nusp16)
tx16.insert('insert','\n')
elif nu1_16+nu2_16+nujw==0:
nusp16=0
nujw=0
tx16.insert('insert',nusp16)
tx16.insert('insert','\n')
elif nu1_16+nu2_16+nujw==2:
nusp16=0
nujw=1
tx16.insert('insert',nusp16)
tx16.insert('insert','\n')
elif nu1_16+nu2_16+nujw==3:
nusp16=1
nujw=1
tx16.insert('insert',nusp16)
tx16.insert('insert','\n')
#下面是将计算结果插入到17个输出文本框
tx17.insert('insert',nujw)
tx17.insert('insert','\n')
tx100.delete(1.0,'end')
tx110.delete(1.0,'end')
tx120.delete(1.0,'end')
tx100.insert('insert',nu1_16)
tx100.insert('insert',nu1_15)
tx100.insert('insert',nu1_14)
tx100.insert('insert',nu1_13)
tx100.insert('insert',nu1_12)
tx100.insert('insert',nu1_11)
tx100.insert('insert',nu1_10)
tx100.insert('insert',nu1_9)
tx100.insert('insert',nu1_8)
tx100.insert('insert',nu1_7)
tx100.insert('insert',nu1_6)
tx100.insert('insert',nu1_5)
tx100.insert('insert',nu1_4)
tx100.insert('insert',nu1_3)
tx100.insert('insert',nu1_2)
tx100.insert('insert',nu1_1)
tx110.insert('insert',nu2_16)
tx110.insert('insert',nu2_15)
tx110.insert('insert',nu2_14)
tx110.insert('insert',nu2_13)
tx110.insert('insert',nu2_12)
tx110.insert('insert',nu2_11)
tx110.insert('insert',nu2_10)
tx110.insert('insert',nu2_9)
tx110.insert('insert',nu2_8)
tx110.insert('insert',nu2_7)
tx110.insert('insert',nu2_6)
tx110.insert('insert',nu2_5)
tx110.insert('insert',nu2_4)
tx110.insert('insert',nu2_3)
tx110.insert('insert',nu2_2)
tx110.insert('insert',nu2_1)
tx120.insert('insert',nusp16)
tx120.insert('insert',nusp15)
tx120.insert('insert',nusp14)
tx120.insert('insert',nusp13)
tx120.insert('insert',nusp12)
tx120.insert('insert',nusp11)
tx120.insert('insert',nusp10)
tx120.insert('insert',nusp9)
tx120.insert('insert',nusp8)
tx120.insert('insert',nusp7)
tx120.insert('insert',nusp6)
tx120.insert('insert',nusp5)
tx120.insert('insert',nusp4)
tx120.insert('insert',nusp3)
tx120.insert('insert',nusp2)
tx120.insert('insert',nusp1)
#下面是界面上各种组件的生成与排布放置
lb1=tk.Label(wind1,text='输入数字1:',width=10,height=2)
lb1.place(x=100,y=30)
ent1=tk.Entry(wind1,width=3)
ent1.place(x=120,y=60)
ent2=tk.Entry(wind1,width=3)
ent2.place(x=146,y=60)
ent3=tk.Entry(wind1,width=3)
ent3.place(x=172,y=60)
ent4=tk.Entry(wind1,width=3)
ent4.place(x=198,y=60)
ent5=tk.Entry(wind1,width=3)
ent5.place(x=224,y=60)
ent6=tk.Entry(wind1,width=3)
ent6.place(x=250,y=60)
ent7=tk.Entry(wind1,width=3)
ent7.place(x=276,y=60)
ent8=tk.Entry(wind1,width=3)
ent8.place(x=302,y=60)
ent9=tk.Entry(wind1,width=3)
ent9.place(x=328,y=60)
ent10=tk.Entry(wind1,width=3)
ent10.place(x=354,y=60)
ent11=tk.Entry(wind1,width=3)
ent11.place(x=380,y=60)
ent12=tk.Entry(wind1,width=3)
ent12.place(x=406,y=60)
ent13=tk.Entry(wind1,width=3)
ent13.place(x=432,y=60)
ent14=tk.Entry(wind1,width=3)
ent14.place(x=458,y=60)
ent15=tk.Entry(wind1,width=3)
ent15.place(x=484,y=60)
ent16=tk.Entry(wind1,width=3)
ent16.place(x=510,y=60)
lbs=tk.Label(wind1,text='+',font=('Arial', 14))
lbs.place(x=80,y=78)
lb2=tk.Label(wind1,text='输入数字2:',width=10,height=2)
lb2.place(x=100,y=90)
ent17=tk.Entry(wind1,width=3)
ent17.place(x=120,y=120)
ent18=tk.Entry(wind1,width=3)
ent18.place(x=146,y=120)
ent19=tk.Entry(wind1,width=3)
ent19.place(x=172,y=120)
ent20=tk.Entry(wind1,width=3)
ent20.place(x=198,y=120)
ent21=tk.Entry(wind1,width=3)
ent21.place(x=224,y=120)
ent22=tk.Entry(wind1,width=3)
ent22.place(x=250,y=120)
ent23=tk.Entry(wind1,width=3)
ent23.place(x=276,y=120)
ent24=tk.Entry(wind1,width=3)
ent24.place(x=302,y=120)
ent25=tk.Entry(wind1,width=3)
ent25.place(x=328,y=120)
ent26=tk.Entry(wind1,width=3)
ent26.place(x=354,y=120)
ent27=tk.Entry(wind1,width=3)
ent27.place(x=380,y=120)
ent28=tk.Entry(wind1,width=3)
ent28.place(x=406,y=120)
ent29=tk.Entry(wind1,width=3)
ent29.place(x=432,y=120)
ent30=tk.Entry(wind1,width=3)
ent30.place(x=458,y=120)
ent31=tk.Entry(wind1,width=3)
ent31.place(x=484,y=120)
ent32=tk.Entry(wind1,width=3)
ent32.place(x=510,y=120)
lb3=tk.Label(wind1,text='------------------------------------------------------------------------------------------',height=2)
lb3.place(x=90,y=150)
bt1=tk.Button(wind1,text='相加',command=add1616bit)
bt1.place(x=547,y=78)
lb4=tk.Label(wind1,text='数字1+数字2结果为:')
lb4.place(x=90,y=180)
tx1=tk.Text(wind1,width=3,height=12)
tx1.place(x=510,y=210)
tx2=tk.Text(wind1,width=3,height=12)
tx2.place(x=484,y=210)
tx3=tk.Text(wind1,width=3,height=12)
tx3.place(x=458,y=210)
tx4=tk.Text(wind1,width=3,height=12)
tx4.place(x=432,y=210)
tx5=tk.Text(wind1,width=3,height=12)
tx5.place(x=406,y=210)
tx6=tk.Text(wind1,width=3,height=12)
tx6.place(x=380,y=210)
tx7=tk.Text(wind1,width=3,height=12)
tx7.place(x=354,y=210)
tx8=tk.Text(wind1,width=3,height=12)
tx8.place(x=328,y=210)
tx9=tk.Text(wind1,width=3,height=12)
tx9.place(x=302,y=210)
tx10=tk.Text(wind1,width=3,height=12)
tx10.place(x=276,y=210)
tx11=tk.Text(wind1,width=3,height=12)
tx11.place(x=250,y=210)
tx12=tk.Text(wind1,width=3,height=12)
tx12.place(x=224,y=210)
tx13=tk.Text(wind1,width=3,height=12)
tx13.place(x=198,y=210)
tx14=tk.Text(wind1,width=3,height=12)
tx14.place(x=172,y=210)
tx15=tk.Text(wind1,width=3,height=12)
tx15.place(x=146,y=210)
tx16=tk.Text(wind1,width=3,height=12)
tx16.place(x=120,y=210)
tx17=tk.Text(wind1,width=3,height=12,fg='red',bg='yellow')
tx17.place(x=94,y=210)
#下面是示意图生成的代码,为另一合作的小伙伴所写,CSDN用户(philo42)
canvas=tk.Canvas(wind1,bg='white',height=80,width=250)
line=canvas.create_line(200,20,150,20)
line=canvas.create_line(170,20,180,15)#箭头
line=canvas.create_line(170,20,180,25)#箭头
rect=canvas.create_rectangle(200,10,200+40,10+20)
line=canvas.create_line(200,60,150,60)
line=canvas.create_line(170,60,180,55)#箭头
line=canvas.create_line(170,60,180,65)#箭头
rect=canvas.create_rectangle(200,50,200+40,50+20)
line=canvas.create_line(150,20,150,60)
line=canvas.create_line(150,40,80,40)
line=canvas.create_line(125,40,135,35)#箭头
line=canvas.create_line(125,40,135,45)#箭头
rect=canvas.create_rectangle(30,30,30+50,30+20)
canvas.place(x=120,y=400)
lb60=tk.Label(wind1,text='ALU')
lb60.place(x=110,y=430)
lb70=tk.Label(wind1,text='主存')
lb70.place(x=290,y=430)
tx120=tk.Text(wind1,width=18,height=1)
tx120.place(x=130,y=405)
tx100=tk.Text(wind1,width=18,height=1)
tx100.place(x=290,y=385)
tx110=tk.Text(wind1,width=18,height=1)
tx110.place(x=290,y=475)
wind1.mainloop()
2.结果示例
【重新输入数据后,点击“相加”按钮,会先删除示意图框中的内容,再换行输出结果!】
3.重点文章
采用手算二进制加法的过程,实现二进制加法器比较简单,至于32、64位加法器可以在本系列代码基础上,轻易增加得到!
重点文章是:原码一位乘,4、8、16位乘法器,采用计算机组成原理书上,原码一位乘计算过程实现,并输出相应的步骤与文字提示!