Le type entier
Rappel d'ouverture (5 minutes, cours fermé)
Réponds sans rouvrir les pages précédentes, en écrivant tes réponses.
- Après
a = 4puisb = apuisa = 7, que valentaetb? Pourquoibn'a-t-il pas suivi ? - Écris
13en binaire sur un octet. - Que fait exactement l'instruction
a = a + 1? Décris l'ordre des opérations.
Corrigé
avaut7etbvaut4.b = aa copié la valeur au moment de l'affectation, il n'a pas créé de lien durable entre les deux cases. Changeraensuite ne touche pasb.00001101.- On calcule d'abord le membre de droite avec la valeur actuelle de
a, puis on range le résultat dansa. Le=n'est pas une égalité mathématique.
Ici, on crée la variable a et on lui donne une valeur, la valeur 2. Python sait tout seul qu'il s'agit d'un entier sans qu'on lui dise. On dit qu'il pratique "l'inférence de type". (Il devine le type)
Afin d'être plus précis, on peut indiquer explicitement le type qu'on souhaite pour la variable en utilisant cette syntaxe:
int est le type correspondant à un entier relatif. int vaut pour integer en anglais qui signifie un nombre entier.
Lorsque les programmes deviennent longs, on peut se perdre dans les types, alors il faut prendre l'habitude de les indiquer lorsqu'on crée des variables.
Représentation en mémoire
Comme toute information, les entiers sont stockés dans la mémoire sous forme d'une suite de bits organisés en octets.
Le code précédent affiche le nombre de bits utilisés par python pour stocker l'information 157.
Représentation des entiers
bin(a) renvoie la représentation binaire de l'entier a.
- Donne l'affichage que produira la ligne
print(bin(a))
hex(a) renvoie la représentation hexadécimale de l'entier a.
- Donne l'affichage que produira la ligne
print(hex(a))
Opérations possibles
Dans la liste ci-dessous, il faut se focaliser sur la section Arithmétique de base
Nous reviendrons en temps et en heure sur les autres.
| Catégorie | Opération | Symbole / Code | Exemple |
|---|---|---|---|
| Arithmétique de base | Addition | + |
3 + 5 → 8 |
| Soustraction | - |
9 - 4 → 5 |
|
| Multiplication | * |
6 * 7 → 42 |
|
| Division entière (quotient) | // |
17 // 5 → 3 |
|
| Modulo (reste) | % |
17 % 5 → 2 |
|
| Puissance | ** |
2 ** 3 → 8 |
|
| Comparaison | Égalité | == |
4 == 4 → True |
| Différent | != |
4 != 5 → True |
|
| Inférieur | < |
3 < 7 → True |
|
| Supérieur | > |
9 > 5 → True |
|
| Inférieur ou égal | <= |
6 <= 6 → True |
|
| Supérieur ou égal | >= |
8 >= 5 → True |
|
| Affectations combinées | Addition et affectation | += |
a += 2 ↔ a = a+2 |
| Soustraction et affectation | -= |
a -= 2 |
|
| etc. | *=, //=, etc. |
Opérations bit-à-bit (hors programme de première)
Il existe aussi des opérateurs qui agissent directement sur les bits d'un entier. Ils ne sont pas au programme de première ; on les cite seulement pour information.
| Opération | Symbole | Exemple |
|---|---|---|
| ET bit-à-bit | & |
5 & 3 → 1 |
| OU bit-à-bit | \| |
5 \| 3 → 7 |
| OU exclusif (XOR) | ^ |
5 ^ 3 → 6 |
| Décalage à gauche | << |
3 << 2 → 12 |
| Décalage à droite | >> |
12 >> 2 → 3 |
Division Euclidienne
La division euclidienne est celle que tu as apprise en primaire. On n'en fait plus trop après, mais c'est une opération fondamentale.
Dans l'opération précédente, on effectue la division euclidienne de 163 par 5.
Le quotient est 32. On l'obtient en calculant 163 // 5
le reste est 3. On l'obtient en calculant 163 % 5
Signification
Si j'ai 163 chocolats et que je veux les rassembler dans des boîtes de 5, je pourrai donc faire 32 boîtes pleines, et il me restera 3 chocolats.
\(163 = 5 \times 32 + 3\)
Le reste est toujours plus petit que le diviseur, en effet, si on trouvait un reste supérieur ou égal à 5, il nous resterait suffisamment de chocolats pour faire au moins une boîte de 5, et donc il resterait en réalité moins.