# python strings are immutable! def EightBitTwosComplement(num) : if num > 127 or num < -128 : return "Error" else : return numToTwosComplement(num) def numToTwosComplement(num, width = 8) : if num >= 0 : return addBinary(width * "0", numToBinary(num)) else : return TwosComplement(addBinary(width * "0", numToBinary(-num))) def EightBitTwosComplementToNum(string) : if string[0] == "0" : return BinaryToNum(string) else : return -1 * BinaryToNum(TwosComplement(string)) def BinaryToNum(string) : if string == "" : return 0 else : return int(string[-1]) + 2*BinaryToNum(string[:-1]) # num2binary(num) takes as input an integer and returns # a binary string representing the number in binary, most # significant digit first. def numToBinary(num) : if num == 0 : return "" else : if num % 2 == 1 : return numToBinary(num/2) + "1" else : return numToBinary(num/2) + "0" def addBinary(string1, string2) : return addHelper(string1, string2, 0) def addHelper(string1, string2, carryin) : if string1 == "" and string2 == "" : if carryin == 1: return str(carryin) else: return "" elif string1 == "" : return addHelper(str(carryin), string2, 0) elif string2 == "" : return addHelper(string1, str(carryin), 0) else : sum = int(carryin + int(string1[-1]) + int(string2[-1])) % 2 carryout = int(carryin + int(string1[-1]) + int(string2[-1])) / 2 return addHelper(string1[:-1], string2[:-1], carryout) + str(sum) def complement(string) : if string == "" : return "" else : if string[0] == "1" : return "0" + complement(string[1:]) else : return "1" + complement(string[1:]) def TwosComplement(string) : return addBinary(complement(string), "1")