HUB

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)

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.

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)

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}.

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 :

  1. Écrire la valeur absolue en binaire.
  2. Inverser tous les bits (complément à 1).
  3. Ajouter 1 au résultat.

Exemples

100_{10} = 01100100_2 Inversion = 10011011_2 Ajout de 1 = 10011100_2

Résultat : -100_{10} = 10011100_2.

5_{10} = 0101_2 Inversion = 1010_2 Ajout de 1 = 1011_2

Résultat : -5_{10} = 1011_2.

Addition avec Complément à 2

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).

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).

2.3. Unicode et UTF-8

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

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!"