Pourquoi les ordinateurs ne connaissent que 0 et 1
Dans ce cours, vous comprendrez : pourquoi les ordinateurs ont choisi le binaire au lieu du décimal, et comment ce choix a déterminé toute l'architecture des ordinateurs modernes.
Commençons par les interrupteurs
Imaginez qu'il y ait une rangée d'interrupteurs devant vous.
Chaque interrupteur n'a que deux états :ouvertoufermé。
Vous ne pouvez pas rendre un interrupteur « à moitié ouvert » ou « ouvert à 37 % » — il est bistable, sans état intermédiaire.
Le composant le plus élémentaire à l'intérieur d'un ordinateur — le transistor — est essentiellement du même type de chose qu'un interrupteur.
Il n'a que deux états stables :Passant (alimenté)etBloqué (hors tension)。
Deux états de tension
Dans les circuits numériques, on attribue un symbole à chacun de ces deux états :
- Une tension élevée (par ex. 3.3V ou 5V) représente1
- Une tension faible (proche de 0V) représente0
La relation entre la tension et le binaire
La bande de couleur ci-dessous simule la plage de tension d'un transistor de 0V à 3.3V, montrant intuitivement la relation entre la logique 0, la logique 1 et la zone interdite.
Logique 0 0.5V 1.0V 1.5V
zone interdite 1.8V
start 2.1V 2.7V 3.3V
Niveau logique 1
Plage du niveau logique 0 : 0.0V ~ 1.5V (région bleue) | Zone interdite : 1.5V ~ 1.8V (zone grise, les signaux ne s'y maintiennent pas) | Plage du niveau logique 1 : 1.8V ~ 3.3V (région orange)
Remarque : le circuit n'a pas besoin de mesurer précisément la valeur de tension ; il doit seulement déterminer « haut ou bas ».
C'est bien plus simple que de juger « quel nombre c'est ».
Pourquoi ne pas utiliser le décimal
Les humains utilisent le système décimal parce que nous avons dix doigts.
Mais pourquoi les ordinateurs ne peuvent-ils pas utiliser le système décimal ?
Première raison : extrêmement difficile à mettre en œuvre en ingénierie
Pour qu'un circuit représente les 10 chiffres du système décimal (0~9), le circuit doit distinguer précisément 10 niveaux de tension différents.
Par exemple : 0V = 0, 0.33V = 1, 0.66V = 2, ..., 3.3V = 9.
Voici le problème : les signaux subissent des pertes et des interférences pendant la transmission.
Supposons que vous envoyiez 0.66V pour représenter le chiffre 2, mais à l'arrivée, la tension devient 0.71V.
Le récepteur serait confus : est-ce 2 (0.66V) ou 3 (0.99V) ?
Raison deux : le binaire est naturellement résistant au bruit
Le binaire n'a besoin que de distinguer deux états, ce qui lui donne une énorme marge d'erreur.
Comme montré : la plage du 0 logique est 0~1.5V, et la plage du 1 logique est 1.8V~3.3V.
Il y a une zone de protection de 0.3V au milieu.
Même si le signal subit de grandes fluctuations, tant qu'il ne franchit pas la zone protégée, les données ne seront pas corrompues.
Raison trois : une adéquation parfaite avec les mathématiques
0 et 1 correspondent exactement à « false » et « true » dans l'algèbre booléenne.
L'algèbre booléenne (les opérations logiques telles que AND, OR, NOT) possède une théorie mathématique complète.
Les ingénieurs peuvent utiliser cette théorie pour concevoir, analyser et optimiser des circuits — c'est une véritable chance.
Le choix du binaire par les ordinateurs n'est pas accidentel. C'est le résultat de contraintes d'ingénierie (faciles à mettre en œuvre), de caractéristiques physiques (résistance au bruit) et d'outils mathématiques (algèbre booléenne) qui travaillent ensemble.
Bits et octets — les unités de base de l'information
Un chiffre binaire est appelé 1 bitbit(bit), il ne peut représenter que 0 ou 1.
De toute évidence, un seul bit peut représenter trop peu d'informations.
Nous combinons donc 8 bits ensemble et appelons cela 1octet(byte).
Combien de valeurs différentes un octet peut-il représenter ?
Chaque bit a 2 choix (0 ou 1), donc le nombre de combinaisons de 8 bits est :
2 x 2 x 2 x 2 x 2 x 2 x 2 x 2 = 28 = 256
C'est-à-dire, de 00000000 (décimal 0) à 11111111 (décimal 255), soit un total de 256 valeurs différentes.
| nombre d'octets | La plage de valeurs représentables | Utilisations courantes |
|---|---|---|
| 1 octet (8 bits) | 0 ~ 255 | Un caractère ASCII, une valeur de canal dans une couleur RGB |
| 2 octets (16 bits) | 0 ~ 65,535 | Numéro de port, taille de registre des premiers processeurs |
| 4 octets (32 bits) | 0 ~ 4,294,967,295 | Adresses IPv4, type int |
| 8 octets (64 bits) | 0 ~ env. 1.8 x 1019 | Longueur de mot des processeurs modernes, type long |
Démo interactive : un simulateur d'ampoule à un octet
Le panneau interactif ci-dessous vous permet de voir intuitivement comment 8 bits se combinent pour former n'importe quelle valeur de 0 à 255.
Chaque ampoule représente un bit.Cliquez sur l'ampoule pour basculer l'état 0/1, et la valeur décimale correspondante est affichée en temps réel à droite.
Simulateur d'ampoule : un octet = 8 bits
Cliquez sur une ampoule pour basculer son état, et observez comment le binaire correspond au décimal.
Regardez attentivement les étiquettes de poids sous chaque ampoule.
L'ampoule la plus à gauche a le poids le plus élevé (128), et celle la plus à droite a le poids le plus faible (1).
C'est le principe de l'« expansion par poids » — multipliez la valeur de chaque position par son poids, puis additionnez le tout pour obtenir le résultat final.
Comprendre le binaire avec du code
Python prend en charge nativement le binaire, nous pouvons donc l'utiliser directement pour vérifier la démo des ampoules ci-dessus.
Exemple
# 1. Afficher la représentation binaire d'un nombre
print("Décimal → Binaire :")
for n in [0, 1, 2, 7, 8, 15, 16, 42, 65, 97, 127, 255]:
# bin() renvoie le format '0b...' ; utilisez [2:] pour supprimer le préfixe.
# zfill(8) complète à 8 bits
print(f" {n:3d} → {bin(n)[2:].zfill(8)}")
print()
# 2. Convertir une chaîne binaire en décimal
print("Binaire → Décimal :")
binary_strings = ["00000000", "01000001", "01100001", "11111111"]
for b in binary_strings:
# int(string, 2) Convertit une chaîne binaire en un entier.
dec = int(b, 2)
print(f" {b} → {dec:3d}")
print()
# 3. Vérifier : un octet a exactement 256 valeurs
print("La plage d'un octet :")
print(fValeur minimale : {int('00000000', 2)})
print(fValeur maximale : {int('11111111', 2)})
print(fNombre total : {int('11111111', 2) - int('00000000', 2) + 1})
print()
# 4. Opérations bit à bit : AND, OR, décalage à gauche, décalage à droite
print("Exemple d'opération bit à bit :")
a = 0b0011 # 3
b = 0b0101 # 5
print(f{bin(a)} & {bin(b)} = {bin(a & b)} (AND bit à bit))
print(f{bin(a)} | {bin(b)} = {bin(a | b)} (OR bit à bit))
print(f{bin(a)} << 1 = {bin(a << 1)} (décalage à gauche de 1 bit, équivalent à une multiplication par 2))
print(f{bin(b)} >> 1 = {bin(b >> 1)} (décalage à droite de 1 bit, équivalent à une division par 2))
print()
# 5. EXEMPLE de chaîne de test
text = "EXEMPLE"
print(fLa représentation binaire de chaque caractère dans la chaîne '{text}' :)
for ch in text:
ascii_val = ord(ch)
print(f" '{ch}' → ASCII={ascii_val:3d} → binaire={bin(ascii_val)[2:].zfill(8)}")
Pourquoi le binaire est le fondement de la « représentation de l'information »
Une fois que vous comprenez le binaire, vous comprenez un fait clé :
Tout ce qui se trouve à l'intérieur d'un ordinateur — nombres, texte, images, son, vidéo — est finalement stocké et traité sous la forme de 0 et de 1.
Dans les cours suivants, vous verrez :
- Cours 2: Comment convertir entre différentes bases
- Cours 3: comment les nombres négatifs sont représentés en binaire (complément à deux)
- Cours 4: comment les nombres décimaux sont représentés en binaire (virgule flottante)
- Leçon 5: comment le texte est représenté en binaire (encodage des caractères)
Tout cela repose sur le principe que « tout est constitué de 0 et de 1 ».
autres extensionsLa conclusion centrale des 5 leçons de ce module : les ordinateurs ne « comprennent » pas l'information ; au contraire, grâce à des règles d'encodage ingénieuses, ils font correspondre tout ce qui existe dans le monde à des combinaisons de 0 et de 1.