# 9/14 bug? symantics XOR syntax

#1

When solving the problem on paper, I came up with 0b011, which, I suppose is the same as 0b11? The picture of my result shows it isn't. Please advise?

#3

For practice, print the result of using ^ on 0b1110 and 0b101 as a binary string. Try to do it on your own without using the ^ operator.

print bin(0b1110 ^ 0b101)

#4

Supplemental

Try to do it on your own without using the ^ operator.

This is a bit convoluted, but the algorithm returns a correct result for a maximum 8 bits.

def a_xor_b(ab):
# fill a list with 8 '0's
bp = list('0'*8)
# convert inputs to 8 bits with possible leading zeros
bits = [(bp + list(ab[i][2:]))[-8:] for i in range(2)]
# preload the results list with '0's (clone of bp)
xor = bp[:]
# compare bits at corresponding index
for i in range(8):
# both bits cannot be zero
if bits[0][i] != 0 and bits[1][i] != 0:
# difference may be 1 or -1 which is set to 1 (0 ignored)
xor[i] = str(abs(int(bits[0][i]) - int(bits[1][i])))
# remove leading zeros
for i in range(len(xor)):
if xor[i] == '1':
xor = xor[i:]
break
# return result as a string representation of a binary
return '0b'+''.join(xor)

# pass a list of 2 binary numbers in string form
print(a_xor_b([ '0b1110', '0b101' ]))     # 0b1011

The methodology is more brute force than elegant. Hopefully a Python guru will pipe in and show us how to improve upon and simplify this program.

#5

share mine it looks complicated but might no limited, hope someone make it concisely.

def a_xor_b(a,b):
str_a = str(bin(a))
str_b = str(bin(b))
str_len = len(str_a) if len(str_a)>=len(str_b) else len(str_b)
str_a_gap = len(str_a)-len(str_b) if len(str_a)<=len(str_b) else 0
str_b_gap = len(str_a)-len(str_b) if len(str_a)>=len(str_b) else 0
str_a = ['0' for i in range(0,abs(str_a_gap))] + [str_a[i] for i in range(2,str_len-abs(str_a_gap))]
str_b = ['0' for i in range(0,abs(str_b_gap))] + [str_b[i] for i in range(2,str_len-abs(str_b_gap))]
str_final = '0b'+''.join(['0' if str_a[i] == str_b[i] else '1' for i in range(str_len-2)])
return str_final

#6

given that we're allowed to assume that & and ~ are defined

def or_(a,b):
return bin(~(~a & ~b))

def xor_(a,b):
return bin((a|b)&~(a&b))