简体   繁体   English

使用加法器电路将两个4位二进制数相加

[英]Adding two 4 digit binary numbers using adder circuits

I need to write a program that adds two 4 digit binary numbers using an adder circuit that gives us an answer. 我需要编写一个程序,使用加法器电路将两个4位二进制数字相加,从而给我们一个答案。 I need to use the int() function to convert this from binary to decimal (both values need to be displayed). 我需要使用int()函数将其从二进制转换为十进制(两个值都需要显示)。 I am struggling to create a code that creates a correct binary AND decimal output. 我正在努力创建可创建正确的二进制和十进制输出的代码。 We're entering 2 sets of four digits. 我们要输入2组四位数。 The digits are supposed to go through the circuit and the results should be them added together. 这些数字应该通过电路,并且结果应加在一起。 Right now the gates are all good. 现在,大门很不错。 But, I cannot get the digits to add together correctly. 但是,我无法将数字正确地加在一起。 The binary addition through the circuit is incorrect. 通过电路的二进制加法不正确。 The converter and inputs are all correct. 转换器和输入均正确。

The user needs to input a 4 digit binary number for x (x1,x2,x3,x4) and y (y1,y2,y3,y4), and ci = 0. For example: x = 1111 y = 0000 用户需要为x(x1,x2,x3,x4)和y(y1,y2,y3,y4)输入4位二进制数,并且ci =0。例如:x = 1111 y = 0000

This is the adder circuit along with the diagram that shows how the circuit will look after adding the two binary numbers(I can't embed images yet) 这是加法器电路,以及显示两个二进制数字相加后电路外观的示意图(我还不能嵌入图像)

this is my current code: 这是我当前的代码:

import string

print('Simple Circuits for Final Project')

x = input('x| enter 4 digits: ')
y = input('y| enter 4 digits: ')

list1 = list(x)
print(list1)

list2 = list(y)
print(list2)



#define all the gates
def xorgate(x,y):
    if x == y:
        return '0'
    else:
        return '1'

def andgate (x,y):
    if x == '1' and y == '1':
        return '1'
    else:
        return '0'

def orgate (x,y):
    if x == '1' or y == '1':
        return '1'
    else:
        return '0'

#define the entire circuit and input the list of inputs for the circuit.
#include the outputs based on the gates defined above.
def circuit(x,y,ci):
    a = 3 #starting value for the while loop, get approp position for our list
    adder = ['0','0','0','0','0']#adder list only has strings of zero. list to hold binary numbers from the output of the adding circuit
    b = 4
    while a >= 0:



        xorout = xorgate(x[a],y[a])
        print("xor:",(xorout))
        s = xorgate(ci,xorout)
        print("Ci:",ci)
        andout = andgate(xorout, ci)
        print("and1:",andout)
        and2out = andgate(x[a],y[a])
        print("and2:",and2out)
        co = orgate(andout,and2out)

        print('s:',s)
        print('co:',co)
        print('-----------------')

        ci = co
        adder[b] = str(s)
        a-=1
        b-=1


    adder[4]=ci
    #print(final)
    print('The Final Binary Output is:', adder[::-1])

    #OUR CONVERTER IS RIGHT, BUT WE CAN'T GET THE BINARY ADDITION ACCURATE
    outputfinal = ((int(adder[4]) * 16) + (int(adder[3]) * 8)+(int(adder[2]) * 4)+(int(adder[1]) * 2)+(int(adder[0]) * 1))
    print('The Final Decimal Output is:', outputfinal)
hold = '0'
circuit(list1,list2,hold)# 3 value for circuit

This is the part we feel is wrong: 这是我们认为是错误的部分:

    ci = co
    adder[b] = str(s)
    a-=1
    b-=1


adder[4]=ci
#print(final)
print('The Final Binary Output is:', adder[::-1])

This is how my current output is, which is wrong: 这是我当前的输出结果,这是错误的:

x| enter 4 digits: 1111
y| enter 4 digits: 0000
['1', '1', '1', '1']
['0', '0', '0', '0']
xor: 1
Ci: 0
and1: 0
and2: 0
s: 1
co: 0
-----------------
xor: 1
Ci: 0
and1: 0
and2: 0
s: 1
co: 0
-----------------
xor: 1
Ci: 0
and1: 0
and2: 0
s: 1
co: 0
-----------------
xor: 1
Ci: 0
and1: 0
and2: 0
s: 1
co: 0
-----------------
The Final Binary Output is: ['0', '1', '1', '1', '0']
The Final Decimal Output is: 14

You are confusing the order of your adder list. 您混淆了加法器列表的顺序。

It should be that first address is 0, not 4: 应该是第一个地址是0,而不是4:

adder[0]=ci
#print(final)

Don't reverse the list yet 暂时不要反转清单

print('The Final Binary Output is:', adder)

Since your converter is expecting it to be in the opposite order, I reverse it here rather than rewrite your converter: 由于您的转换器期望其顺序相反,因此在这里我将其反转而不是重写您的转换器:

adder = adder[::-1]
#OUR CONVERTER IS RIGHT, BUT WE CAN'T GET THE BINARY ADDITION ACCURATE
outputfinal = ((int(adder[4]) * 16) + (int(adder[3]) * 8)+(int(adder[2]) * 4)+(int(adder[1]) * 2)+(int(adder[0]) * 1))
print('The Final Decimal Output is:', outputfinal)

You can try out the whole program (since you are getting a different result) in an online repl: https://repl.it/repls/CompetitiveSerpentineAccess 您可以在在线repl中试用整个程序(因为得到不同的结果): https : //repl.it/repls/CompetitiveSerpentineAccess

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM