NSI – Séquence 1 : Représentation des données : types & valeurs de base

Séquence 1 — Représentation des données

Types & valeurs de base : binaire, encodage, nombres, booléens et chaînes
Intro

Comment l’ordinateur représente l’information ?

Tout est binaire (0/1). Sur cette base, on encode des nombres, des lettres, des couleurs, du son. Comprendre les types et leurs valeurs de base est essentiel pour programmer sans erreurs.

▶ Binaire, hexadécimal & caractères

Ce que vous allez apprendre

  • Binaire : bit, octet, puissances de 2, conversions décimal↔binaire↔hexadécimal.
  • Nombres : entiers signés (complément à deux, bornes), réels en virgule flottante (IEEE 754, arrondis).
  • Booléens : logique (Vrai/Faux), opérateurs (and, or, not).
  • Chaînes de caractères : encodage ASCII/Unicode, UTF‑8, code point, byte.
  • Types en Python : int, float, bool, str, conversions (int(), float(), str()).

Vocabulaire à maîtriser

Bit : plus petite unité d’information (0 ou 1).
Octet (Byte) : 8 bits (valeurs 0 à 255).
Hexadécimal : base 16 (0–9, A–F), pratique pour compacter le binaire.
UTF‑8 : encodage Unicode à longueur variable (1 à 4 octets par caractère).
IEEE 754 : norme de représentation des nombres à virgule flottante.
Complément à 2 : codage des entiers signés en binaire.

1) Binaire, puissances de 2 et conversions

Un octet contient 8 bits : il représente 2^8 = 256 valeurs différentes (0–255). Le binaire s’additionne et se convertit en décimal/hexadécimal par groupes de bits.

Décimal → Binaire : décomposer en puissances de 2 (128,64,32,16,8,4,2,1).
Binaire → Hexa : regrouper par 4 bits (0000→0, …, 1111→F).
Hexa → Binaire : chaque chiffre hexa = 4 bits (ex. A=1010, F=1111).
Ordres de grandeur : 1 KiB=1024 B, 1 MiB=1024 KiB (préfixes binaires).
# Astuce de conversion
# Décimal → Binaire (ex. 42)
# 42 = 32 + 8 + 2 → 00101010
# Binaire → Hexa (0010 1010)₂ = 0x2A
        

2) Entiers signés : complément à 2

Sur n bits, les entiers signés vont de −2^(n−1) à 2^(n−1)−1. Exemple sur 8 bits : −128 à 127. Le bit de poids fort sert au signe.

Obtenir −x : inverser les bits de x puis ajouter 1.
Débordement : addition au‑delà de la borne → repliement modulo 2^n.
Exemple : 127 (0111 1111) + 1 = −128 (1000 0000) sur 8 bits.
Comparaison : l’ordre binaire ≠ ordre arithmétique sans signe.
# Python (int est en précision arbitraire, mais on peut simuler 8 bits)
(x + y) & 0xFF         # garde 8 bits
(~x + 1) & 0xFF        # complément à 2 (−x) sur 8 bits
        

3) Virgule flottante : précision et arrondis (IEEE 754)

Un float (double précision) stocke un signe, un exposant et une mantisse. Il n’y a pas de représentation exacte pour la plupart des décimaux (ex. 0,1), d’où des erreurs d’arrondi.

Exemple : 0.1 + 0.2 ≠ 0.3 exactement en binaire.
Bonnes pratiques : éviter les comparaisons d’égalité directe sur les floats ; utiliser une tolérance.
Plage : très grands/petits nombres mais précision finie.
Spéciaux : ±∞, NaN (résultat indéfini).
# Python
0.1 + 0.2 == 0.3          # False
abs((0.1 + 0.2) - 0.3) < 1e-12  # comparaison avec tolérance
        

4) Booléens & logique

  • Deux valeurs : True, False.
  • Opérateurs : and, or, not.
  • Table de vérité : combinaisons des opérateurs sur deux booléens.
# Python
x = True; y = False
x and y   # False
x or y    # True
not x     # False
        

5) Chaînes & encodage (ASCII, Unicode, UTF‑8)

  • ASCII : 128 caractères (7 bits). Limité.
  • Unicode : code points universels (ex. U+00E9 = é).
  • UTF‑8 : encodage de ces points en 1–4 octets.
# Python
s = "é"                 # caractère Unicode
len(s)                   # 1 (caractère)
len(s.encode('utf-8'))   # 2 (octets)
"é".encode('utf-8')     # b'\xc3\xa9'
        

6) Types en Python : résumé

TypeExemplesConversions utilesNotes
int0, -5, 2**63int("42"), int(3.0)Précision arbitraire en Python
float3.14, 1e-9float("2.5"), float(3)IEEE 754 (arrondis)
boolTrue, Falsebool(0)False, bool(42)True0=Faux, ≠0=Vrai (dans un test)
str"NSI", "é"str(42), "A".encode("utf-8")UTF‑8 conseillé pour les fichiers

Astuce : type(x) affiche le type de x. isinstance(x, int) teste l’appartenance à un type.

Exercices d’application

Travail en binôme. Justifiez vos réponses, montrez vos étapes de conversion et testez vos hypothèses avec de courts scripts Python.

A) Conversions & bases

  1. Convertir en binaire puis en hexadécimal : 13, 42, 255, 512.
  2. Convertir en décimal : (101101)₂, (1100 0110)₂, 0x2A, 0xFF.
  3. Compléter : 1 octet = … bits ; 1 KiB = … octets ; 1 MiB = … KiB.
  4. Écrire la suite de bits pour 0xAF et 0x3C (sur 1 octet).
# Script d’aide (facultatif)
# Entrer un entier et afficher binaire/hexadécimal
n = int(input("n = "))
print(bin(n), hex(n))
        

B) Entiers signés

  1. Sur 8 bits, donner l’intervalle des entiers signés.
  2. Donner la représentation sur 8 bits de −1, −42 en complément à 2.
  3. Montrer un exemple d’overflow en additionnant deux entiers sur 8 bits.
  4. (Défi) Écrire une fonction Python qui simule l’addition sur 8 bits (modulo 256).
# Aide
# (-x) sur 8 bits : (~x + 1) & 0xFF
        

C) Virgule flottante

  1. Tester en Python : 0.1 + 0.2 == 0.3. Expliquer le résultat.
  2. Proposer une manière correcte de comparer deux float.
  3. Donner un exemple de calcul simple où l’ordre des opérations change légèrement le résultat en float.
# Aide
abs((a - b)) < 1e-12   # tolérance
        

D) Chaînes & encodage

  1. Donner le code point Unicode de « é » (notation U+…)
  2. Afficher en Python la longueur en caractères et en octets de « école » en UTF‑8.
  3. Pourquoi UTF‑8 est‑il qualifié de « à longueur variable » ? Donner un exemple.
# Aide
s = "école"
print(len(s), len(s.encode('utf-8')))
        

Mini‑projets (prochainement)

Ressources & fiches mémo

ThèmeContenuExemple
BasesPuissances de 2, bits, octets, conversion0x2A = 42
EntiersComplément à 2, bornes8 bits : −128…127
FloatsIEEE 754, arrondis0.1+0.2 ≠ 0.3
ChaînesUnicode, UTF‑8, bytes"é" → b'\xC3\xA9'

Pensez à documenter vos essais dans un petit carnet de bord : conversions, cas limites, résultats inattendus.

M. SALAH — Copyright salah.cc