Kevin Medjiako
Kevin Medjiako

Reputation: 109

The sum of my bit adder is only working some of the time

There seems to be a problem with my logic as it does not always give the right output. for example when I enter 2 and 2 I get [0, 0, 0, 0, 0, 1, 0, 1] and i should get [0, 0, 0, 0, 0, 1, 0, 0]

I think that there is a logical error in my code when it takes the 2 inputs but I cannot see where it is coming from.

8-bit-binary adder

code below

#if you have questions about the code just ask



array


# arrays and funtions
Array1 = []
Array2 = []
#Input A and Validation
def vaildNumberA():
    Array1 = []
    a = int(input("Enter your A value:"))
    if (a < 0):
            print("Please Enter A Valid Number For Input A")
    elif (a > 255):
        print("Please Enter A Valid Number For Input A")
    else:
         Array1 = [int(x) for x in list('{0:08b}'.format(a))]

    #Return the array 
    return Array1

#Input B and Validation
def vaildNumberB():

    Array2 = [] 
    b = int(input("Enter your B value:"))
    if (b < 0):
        print("Please Enter A Valid Number For Input B")
    elif (b > 255):
        print("Please Enter A Valid Number For Input B")
    else:
        Array2 = [int(x) for x in list('{0:08b}'.format(b))]

    #Return the array
    return Array2

# AND Gate
def AND (a,b):
    if (a == 1 and b == 1):
        return 1
    else:
        return 0
#OR Gate
def OR(a,b):
    if (a == 1 or b == 1):
       return 1
    else:
        return 0

#XOR Gate   
def XOR (a,b):
    if (a == b):
        return 0
    else: 
        return 1

#carry formula
def carryformula(a,b,c,d):
    return OR(AND(a,b), AND(c,d))

# this is where the calculation should be done

loop1

#formula for sum
def calculateSum(Array1,Array2): 
    carry = ""
    sumof = []
    for index in range(len(Array1)):
        list2 = Array2[index]
        sec_xor_form = XOR(Array1[index],Array2[index])
        sumof.append(XOR(sec_xor_form,carry))
        carry = carryformula(Array1[index],Array2[index],sec_xor_form,carry)  
    return list(reversed(sumof))

loop

while True:

    #Call the function from within the while True loop 
    Array1 = vaildNumberA()
    Array2 = vaildNumberB()
    total = calculateSum(list(reversed(Array1)),list(reversed(Array2)))
    print(total)
    quit = input("if want to quit type q: ")

quit

    if quit == 'q':
        break

Upvotes: 1

Views: 61

Answers (1)

blhsing
blhsing

Reputation: 106598

The carry variable should be initialized as 0 instead of an empty string "", so that your XOR function can evaluate a == b as True and properly return 0 when the first bit is 0.

Change:

carry = ""

to:

carry = 0

Upvotes: 1

Related Questions