Calcul du complément à 2**n, sur n bits.
def conv_n_vers_base(n, base=2): """ Convertit l'entier naturel n vers la base 'base'. >>> conv_n_vers_base(9) [1, 0, 0, 1] >>> conv_n_vers_base(100, 4) [1, 2, 1, 0] """ b=[] while n>0: b=[n%base]+b n=n//base if len(b)==0: b.append(0) return b def conv_base_vers_10(chiffres, base=2): """ Convertit l'entier naturel donné par la liste de ses chiffres dans la base 'base'. >>> conv_base_vers_10([1, 0, 0, 1], 2) 9 >>> conv_base_vers_10([1, 2, 1, 0], 4) 100 """ n = 0 for i in range(len(chiffres)): n = n*base + chiffres[i] return n def complement_a_deux(x, n): """ Calcule le complément à (2**n) du nombre entier x, représenté sur n bits. >>> complement_a_deux(3, 3) 5 >>> complement_a_deux(3, 4) 13 >>> complement_a_deux(3, 8) 253 """ bits = conv_n_vers_base(x) while len(bits) < n: bits = [0] + bits for i in range(len(bits)): bits[i] = 1 - bits[i] return (conv_base_vers_10(bits) + 1)