有三道问题
1.Bitwise and,or
2.32-bit full adder
3.subtraction
有三道问题
1.Bitwise and,or
2.32-bit full adder
##1
def and_32bit(a,b):
return tuple([int(v) & int(b[i]) for i,v in enumerate(a)])
def or_32bit(a,b):
return tuple([int(v) | int(b[i]) for i,v in enumerate(a)])
##2
def add32(a, b):
x, y = int(a, 2), int(b, 2)
c1=max(len(bin(x)),len(bin(y)))
while y:
answer = x ^ y
carry = (x & y) << 1
x, y = answer, carry
return bin(x)[2:].zfill(32),len(bin(x))-c1
##3
def addsub32(a, b,control):
if control==0:
return add32(a,b)
x, y = int(a, 2), int(b, 2)
c1=max(len(bin(x)),len(bin(y)))
a = a.zfill(32)
b = b.zfill(32)
new_binary = ''
carry = 0
i = len(a)-1
while i >= 0:
s = int(a[i]) - int(b[i])
if s == -1:
if carry == 0:
carry = 1
new_binary = new_binary + "1"
else:
carry = 1
new_binary = new_binary + "0"
if s == 0:
if carry == 0:
carry = 0
new_binary = new_binary + "0"
else:
carry = 1
new_binary = new_binary + "1"
if s == 1:
if carry == 0:
carry = 0
new_binary = new_binary + "1"
else:
carry = 0
new_binary = new_binary + "0"
i = i - 1
if carry > 0:
new_binary = new_binary + "1"
return new_binary[::-1],0