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位乘法器,采用计算机组成原理书上,原码一位乘计算过程实现,并输出相应的步骤与文字提示!

posted @ 2021-11-23 17:05  TDTX  阅读(325)  评论(0编辑  收藏  举报