Représentation des Données, Bases Numériques, Entiers Relatifs et Cryptographie
Outils python :
| Fonction |
Description |
Exemple |
| ord() |
Renvoie le code Unicode d'un caractère. |
ord('A') → 65 |
| chr() |
Renvoie le caractère correspondant à un code Unicode. |
chr(65) → 'A' |
| hex() |
Convertit un entier en chaîne hexadécimale (base 16). |
hex(65) → '0x41' |
| oct() |
Convertit un entier en chaîne octale (base 8). |
oct(65) → '0o101' |
| bin() |
Convertit un entier en chaîne binaire (base 2). |
bin(65) → '0b1000001' |
| int() |
Convertit une chaîne représentant un nombre dans une base spécifique en entier. |
int('41', 16) → 65 |
| str() |
Convertit un objet en chaîne de caractères (string). |
str(65) → '65' |
| ascii() |
Renvoie une version lisible ASCII d'un objet, en échappant les caractères non-ASCII avec des séquences d'échappement. |
ascii('é') → "'\\xe9'" |
Encodage des Caractères
| Étape |
Description |
Exemples |
| ASCII |
Un encodage sur 7 bits (128 caractères) utilisé principalement pour les caractères anglais. |
Lettre "A" → 01000001 (binaire) → 65 (décimal) |
| ISO-8859-1 |
Une extension de l'ASCII, encodant sur 8 bits (256 caractères), adaptée aux langues européennes. |
Lettre "é" en ISO-8859-1 → 11101000 (binaire) → 0xE8 (hexadécimal) |
| UNICODE |
Standard universel attribuant un point de code à chaque caractère, couvrant plus de 143 000 caractères. |
Lettre "é" → Point de code 233 en décimal → U+00E9 en Unicode |
| UTF-8 |
Système de codage compatible avec ASCII, codant les caractères sur 1 à 4 octets. |
Lettre "é" → 11000011 10101001 (binaire) → 0xC3A9 (hexadécimal) |
| UTF-16 |
Encodage Unicode qui utilise 2 ou 4 octets pour coder les caractères. |
Lettre "é" → 00000000 11101001 (binaire) → 0x00E9 (hexadécimal) |
| UTF-32 |
Encodage Unicode qui utilise toujours 4 octets pour chaque caractère. |
Lettre "é" → 00000000 00000000 00000000 11101001 (binaire) → 0x000000E9 (hexadécimal) |
| Point de code |
Entier attribué à chaque caractère dans Unicode (ex. 65 pour 'A'). |
"A" → Point de code 65 (décimal), "é" → Point de code 232 (décimal), ord('A') → 65, chr(65) → 'A' |
1. Représentation des Nombres
1.1. Systèmes de Numération et Conversions entre Bases
Binaire (Base 2)
- Principe : Utilise uniquement les chiffres 0 et 1.
- Conversion Décimal → Binaire :
Diviser le nombre par 2, noter les restes, puis lire les restes de bas en haut.
Exemple : Convertir 72 en binaire :
72 ÷ 2 = 36 reste 0
36 ÷ 2 = 18 reste 0
18 ÷ 2 = 9 reste 0
9 ÷ 2 = 4 reste 1
4 ÷ 2 = 2 reste 0
2 ÷ 2 = 1 reste 0
1 ÷ 2 = 0 reste 1
Résultat : 72_{10} = 1001000_2.
- Conversion Binaire → Décimal :
Multiplier chaque bit par 2^n (où n est la position du bit, en partant de 0 à droite), puis additionner.
Exemple : 101_2 = 1×2^2 + 0×2^1 + 1×2^0 = 5_{10}.
Hexadécimal (Base 16)
- Principe : Utilise 0-9 et A-F (A=10, B=11, ..., F=15).
- Conversion Décimal → Hexadécimal :
Diviser le nombre par 16 et noter les restes.
Exemple : Convertir 2512 en hexadécimal :
2512 ÷ 16 = 157 reste 0 (0)
157 ÷ 16 = 9 reste 13 (D)
Résultat : 2512_{10} = 9D0_{16}.
- Conversion Binaire ↔ Hexadécimal :
Regrouper les bits par 4 (en partant de la droite) et remplacer chaque groupe par le symbole hexadécimal correspondant.
Exemple : 101111_2 = 0010 1111_2 = 2F_{16}.
Addition Binaire
0 + 0 = 0, 0 + 1 = 1, 1 + 1 = 10 (retenue de 1).
Exemple :
1111_2
+ 0101_2
-------
10100_2
1.2. Entiers Relatifs : Complément à 2
Principe
Méthode pour représenter les nombres négatifs en binaire :
- Écrire la valeur absolue en binaire.
- Inverser tous les bits (complément à 1).
- Ajouter 1 au résultat.
Exemples
- Codage de -100 sur 8 bits :
100_{10} = 01100100_2
Inversion = 10011011_2
Ajout de 1 = 10011100_2
Résultat : -100_{10} = 10011100_2.
- Codage de -5 sur 4 bits :
5_{10} = 0101_2
Inversion = 1010_2
Ajout de 1 = 1011_2
Résultat : -5_{10} = 1011_2.
Addition avec Complément à 2
- Exemple : Additionner 5_{10} et 3_{10} sur 4 bits :
5_{10} = 0101_2
-3_{10} = 1101_2 (complément à 2)
Addition = 0101_2 + 1101_2 = 10010_2
On ignore le bit de dépassement (overflow) : Résultat = 0010_2 = 2_{10}.
2. Représentation des Caractères
2.1. ASCII (7 bits)
128 caractères (lettres A-Z/a-z, chiffres 0-9, symboles).
- Limitations : Pas d'accents ni de caractères spéciaux.
- Fonctions Python :
print(ord('A')) # Affiche 65
print(chr(65)) # Affiche 'A'
2.2. ISO-8859 (8 bits)
Étend l'ASCII avec des caractères européens (accents, symboles).
- Limitations : Non universel, limité à 256 caractères.
2.3. Unicode et UTF-8
- Unicode : Standard universel (plus d'1 million de caractères).
- UTF-8 : Codage variable (1 à 4 octets), compatible ASCII.
- Exemple en Python :
texte = "Bonjour"
texte_utf8 = texte.encode('utf-8') # Encodage
texte_original = texte_utf8.decode('utf-8') # Décodage
3. Cryptographie : Chiffrement de César
3.1. Principe
- Décalage : Chaque lettre est décalée dun nombre fixe dans lalphabet.
- Exemple : Décalage de 3 → A → D, B → E, ..., Z → C.
3.2. Implémentation en Python
def cesar_chiffrement(texte, decalage):
resultat = ""
for caractere in texte:
if caractere.isalpha():
base = ord('A') if caractere.isupper() else ord('a')
resultat += chr((ord(caractere) - base + decalage) % 26 + base)
else:
resultat += caractere
return resultat
message = "Bonjour, le monde!"
message_code = cesar_chiffrement(message, 3)
print(message_code) # Affiche "Erqmrxu, oh prqgh!"