Compléments - niveau avancé¶
Les compléments ci-dessous expliquent des fonctions évoluées sur les entiers. Les débutants en programmation peuvent sans souci sauter cette partie en cas de difficultés.
Opérations logiques : ET &, OU | et OU exclusif ^¶
Il est possible aussi de faire des opérations bit à bit sur les nombres entiers. Le plus simple est de penser à l’écriture du nombre en base 2.
Considérons par exemple deux entiers constants dans cet exercice
x49 = 49
y81 = 81Ce qui nous donne comme décomposition binaire :
Pour comprendre comment passer de à il suffit d’observer que :
ET logique : opérateur &¶
L’opération logique & va faire un et logique bit à bit entre les opérandes, ainsi
x49 & y8117Et en effet :
OU logique : opérateur |¶
De même, l’opérateur logique | fait simplement un ou logique, comme ceci :
x49 | y81113On s’y retrouve parce que :
OU exclusif : opérateur ^¶
Enfin, on peut également faire la même opération à base de ou exclusif avec l’opérateur ^ :
x49 ^ y8196Je vous laisse le soin de décortiquer le calcul à titre d’exercice (le ou exclusif de deux bits est vrai si et seulement si exactement une des deux entrées est vraie).
Décalages¶
Un décalage à gauche de, par exemple, 4 positions, revient à décaler tout le champ de bits de 4 cases à gauche (les 4 nouveaux bits insérés sont toujours des 0). C’est donc équivalent à une multiplication par :
x49 << 4The history saving thread hit an unexpected error (OperationalError('attempt to write a readonly database')).History will not be written to the database.
784De la même manière, le décalage à droite de revient à une division par (plus précisément, le quotient de la division) :
x49 >> 43Une astuce¶
On peut utiliser la fonction built-in bin pour calculer la représentation binaire d’un entier. Attention, la valeur de retour est une chaîne de caractères de type str :
bin(x49)'0b110001'Dans l’autre sens, on peut aussi entrer un entier directement en base 2 comme ceci :
x49bis = 0b110001
x49bis == x49TrueIci, comme on le voit, x49bis est bien un entier.