Addition binaire⚓︎

Dans cet exercice, les nombres binaires sont représentés par des listes où les bits de poids forts sont situés en tête et les bits de poids faibles à la fin.

Ainsi la liste [1, 1, 0, 1] représente l'entier \(1×2^3 + 1×2^2 +0×2^2 + 1×2^0 = 13\).

On ne demande pas de convertir les nombres dans ce sujet.

On rappelle que l'addition de nombres binaires se fait chiffre à chiffre (ici bit à bit), sans oublier l'éventuelle retenue. Ainsi la somme de \(1\) et \(1\) renvoie \(0\) et conserve \(1\) en retenue.

La fonction additionneur fournie permet de mettre en œuvre ces additions élémentaires de bits. Elle prend les valeurs de trois bits (les deux valeurs à sommer suivie de la retenue à prendre en compte) et renvoie le tuple contenant en première position le bit de retenue et en seconde le bit de poids faible de la somme .

On a ainsi :

🐍 Console Python
>>> additionneur(0, 0, 0)
(0, 0)
>>> additionneur(0, 1, 0)
(0, 1)
>>> additionneur(1, 1, 0)
(1, 0)
>>> additionneur(1, 1, 1)
(1, 1)
La fonction additionneur
🐍 Script Python
def additionneur(a, b, retenue):
    return (a & b) | (a & retenue) | (b & retenue), a ^ b ^ retenue

Cette fonction utilise des opérateurs booléens :

  • & est l'opérateur \(\text{et}\) ;
  • | est l'opérateur \(\text{ou}\) ;
  • ^ est l'opérateur \(\text{ou exclusif}\).

Lorsque que l'on additionne trois bits, le résultat peut-être exprimé à partir de ces opérateurs :

  • la retenue de \(a+b+c\) vaut \((a\text{ et }b)\text{ ou }(a\text{ et }c)\text{ ou }(b\text{ et }c)\) ;
  • le bit de poids faible vaut \(a\text{ ou exclusif }b\text{ ou exclusif }c\).

On souhaite dans cet exercice écrire une fonction addition_binaire qui étend la fonction additionneur aux additions de nombres s'écrivant sur \(8\) bits.

On se restreint donc aux cas des nombres entiers positifs de \(8\) bits. Les nombres sont donc tous représentés par des tableaux à \(8\) éléments.

Écrire la fonction addition_binaire qui prend en paramètres deux « nombres » représentés par des listes de \(8\) bits et renvoie une liste de \(8\) bits correspondant à l'addition binaire des deux nombres.

Interdiction

On n'utilisera pas les fonctions natives de Python permettant la manipulation des bits.

Exemples
>>> a = [0, 0, 0, 0, 1, 0, 1, 0]
>>> b = [0, 0, 0, 0, 0, 1, 0, 1]
>>> addition_binaire(a, b)
[0, 0, 0, 0, 1, 1, 1, 1]
>>> a = [0, 1, 1, 1, 1, 1, 1, 1]
>>> b = [0, 0, 0, 0, 0, 0, 0, 1]
>>> addition_binaire(a, b)
[1, 0, 0, 0, 0, 0, 0, 0]
>>> a = [1, 1, 1, 1, 1, 1, 1, 1]
>>> b = [0, 0, 0, 0, 0, 0, 0, 1]
>>> addition_binaire()
[0, 0, 0, 0, 0, 0, 0, 0]
###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Évaluations restantes : 5/5
43908.43996.43997.43980.43993.43985.43988.43979.43928.43995.43988.43993.43979.43979.43909.43930.43980.43985.43976.43930.43910.43954.43908.43979.43981.43989.43989.43993.43978.43969.43910.44011.43991.43988.43981.43980.43985.43991.43990.43908.43927.43979.43981.43989.43989.43993.43978.43969.43910.43954.43908.43996.43985.43982.43928.43989.43993.43978.43987.43996.43991.43983.43990.43909.43930.43913.43930.43928.43979.43980.43969.43988.43997.43909.43930.43989.43993.43978.43999.43985.43990.43906.43913.43926.43919.43997.43989.43928.43913.43997.43989.43930.43928.43910.43954.43908.43996.43985.43982.43928.43995.43988.43993.43979.43979.43909.43930.43984.43985.43999.43984.43988.43985.43999.43984.43980.43930.43910.43908.43980.43993.43994.43988.43997.43928.43995.43988.43993.43979.43979.43909.43930.43984.43985.43999.43984.43988.43985.43999.43984.43980.43980.43993.43994.43988.43997.43930.43910.43908.43980.43978.43910.43908.43980.43984.43928.43995.43991.43988.43979.43976.43993.43990.43909.43930.43914.43930.43928.43995.43988.43993.43979.43979.43909.43930.43998.43985.43988.43997.43990.43993.43989.43997.43930.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43998.43985.43988.43997.43990.43993.43989.43997.43930.43910.90037.43928.44008.43978.43991.43976.43991.43979.43985.43980.43985.43991.43990.43928.43996.43997.43928.43995.43991.43978.43978.43997.43995.43980.43985.43991.43990.43908.43927.43979.43976.43993.43990.43910.43908.43927.43980.43984.43910.43908.43927.43980.43978.43910.43908.43980.43978.43910.43908.43980.43996.43928.43995.43988.43993.43979.43979.43909.43930.43988.43985.43990.43997.43990.43991.43979.43930.43910.43908.43996.43985.43982.43928.43995.43988.43993.43979.43979.43909.43930.43988.43985.43990.43997.43990.43991.43996.43985.43982.43930.43910.43908.43976.43978.43997.43910.43908.43979.43976.43993.43990.43910.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43991.43978.43989.43993.43988.43930.43910.43913.43908.43927.43979.43976.43993.43990.43910.43954.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43991.43978.43989.43993.43988.43930.43910.43914.43908.43927.43979.43976.43993.43990.43910.43954.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43991.43978.43989.43993.43988.43930.43910.43915.43908.43927.43979.43976.43993.43990.43910.43954.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43991.43978.43989.43993.43988.43930.43910.43916.43908.43927.43979.43976.43993.43990.43910.43954.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43991.43978.43989.43993.43988.43930.43910.43917.43908.43927.43979.43976.43993.43990.43910.43954.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43991.43978.43989.43993.43988.43930.43910.43918.43908.43927.43979.43976.43993.43990.43910.43954.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43991.43978.43989.43993.43988.43930.43910.43919.43908.43927.43979.43976.43993.43990.43910.43954.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43991.43978.43989.43993.43988.43930.43910.43904.43908.43927.43979.43976.43993.43990.43910.43954.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43991.43978.43989.43993.43988.43930.43910.43905.43908.43927.43979.43976.43993.43990.43910.43908.43927.43976.43978.43997.43910.43908.43927.43996.43985.43982.43910.43908.43927.43980.43996.43910.43908.43980.43996.43928.43995.43988.43993.43979.43979.43909.43930.43995.43991.43996.43997.43930.43910.43908.43996.43985.43982.43910.43908.43976.43978.43997.43910.43908.43979.43976.43993.43990.43910.43908.43927.43979.43976.43993.43990.43910.43908.43995.43991.43996.43997.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43987.43930.43910.43996.43997.43998.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43998.43930.43910.43993.43996.43996.43985.43980.43985.43991.43990.44007.43994.43985.43990.43993.43985.43978.43997.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43920.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43993.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43994.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43921.43906.43908.43927.43979.43976.43993.43990.43910.43954.43928.43928.43928.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43978.43997.43980.43997.43990.43981.43997.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43930.43910.43909.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43989.43985.43930.43910.43912.43908.43927.43979.43976.43993.43990.43910.43954.43928.43928.43928.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43978.43997.43979.43981.43988.43980.43993.43980.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43930.43910.43909.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.44003.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43987.43995.43930.43910.44022.43991.43990.43997.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.44005.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43930.43910.43922.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43989.43985.43930.43910.43904.43908.43927.43979.43976.43993.43990.43910.43954.43928.43928.43928.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43987.43930.43910.43998.43991.43978.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43985.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43983.43930.43910.43985.43990.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43994.43930.43910.43978.43993.43990.43999.43997.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43920.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43989.43985.43930.43910.43919.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43930.43910.43925.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43989.43985.43930.43910.43913.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43930.43910.43925.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43989.43985.43930.43910.43913.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43921.43906.43908.43927.43979.43976.43993.43990.43910.43954.43928.43928.43928.43928.43928.43928.43928.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43994.43985.43980.44007.43993.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43930.43910.43909.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43993.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.44003.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43985.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.44005.43908.43927.43979.43976.43993.43990.43910.43954.43928.43928.43928.43928.43928.43928.43928.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43994.43985.43980.44007.43994.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43930.43910.43909.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43994.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.44003.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43985.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.44005.43908.43927.43979.43976.43993.43990.43910.43954.43928.43928.43928.43928.43928.43928.43928.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43978.43997.43980.43997.43990.43981.43997.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43994.43985.43980.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43930.43910.43909.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43993.43996.43996.43985.43980.43985.43991.43990.43990.43997.43981.43978.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43920.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43994.43985.43980.44007.43993.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43994.43985.43980.44007.43994.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43924.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43978.43997.43980.43997.43990.43981.43997.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.43921.43908.43927.43979.43976.43993.43990.43910.43954.43928.43928.43928.43928.43928.43928.43928.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43978.43997.43979.43981.43988.43980.43993.43980.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.44003.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43985.43908.43927.43979.43976.43993.43990.43910.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43976.43930.43910.44005.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43991.43930.43910.43909.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43994.43985.43980.43908.43927.43979.43976.43993.43990.43910.43954.43928.43928.43928.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43987.43930.43910.43978.43997.43980.43981.43978.43990.43908.43927.43979.43976.43993.43990.43910.43928.43908.43979.43976.43993.43990.43928.43995.43988.43993.43979.43979.43909.43930.43990.43930.43910.43978.43997.43979.43981.43988.43980.43993.43980.43908.43927.43979.43976.43993.43990.43910.43954.43908.43927.43995.43991.43996.43997.43910.43908.43927.43976.43978.43997.43910.43908.43927.43996.43985.43982.43910.43908.43927.43980.43996.43910.43908.43927.43980.43978.43910.43908.43927.43980.43993.43994.43988.43997.43910.43908.43927.43996.43985.43982.43910.43954.43908.43927.43996.43997.43980.43993.43985.43988.43979.43910.43954.43908.43927.43996.43985.43982.43910