TP Binaire

publicité
0 et 1
La mémoire d’un ordinateur est constituée d’une multitude de petits circuits électroniques. Chacun de ces
circuits ne peut prendre que deux états. On associe traditionnellement l’un des états à 0 et l’autre à 1. De ce
fait toute information doit être traduite dans un ordinateur uniquement par des 0 et des 1.
A retenir :
Bit : bit est l’abréviation de BInary Digit (chiffre binaire.).
Octet (Byte) : Un octet (en anglais : byte) est une suite de 8 bits.
Exercice 1
Si la mémoire d’un ordinateur était constituée de dix circuits à mémoire-un-bit (autrement dit : par des mots
de 10 bits), quel serait le nombre d’états possibles de la mémoire de cet ordinateur ?
Et avec 1 milliard de circuits ?
Pour l’évolution du nombre de transistors dans un processeur : http://fr.wikipedia.org/wiki/Transistor
Exercice 2
On veut représenter les 7 couleurs de l’arc en ciel par un mot, les sept mots devant être distincts et de même
longueur (en bits). Quelle est la longueur minimale de ces mots ?
Exprimer un entier en base b.
On rappelle que l’écriture usuelle pour les entiers est une écriture décimale ou écriture en base dix, ce qui
signifie que l’on exprime les entiers sous la forme d’une combinaison linéaire de puissances de dix, les
coefficients de la combinaison étant des nombres entiers entre 0 et 9 (ce sont les chiffres de l’entier).
Exemple : 5489 =
Si l’écriture 5489 était l’écriture d’un entier en base seize, 5489 désignerait l’entier
Pour distinguer 5489 base dix et 5489 base seize, on peut utiliser certaines conventions de notations. Par
exemple : 5489(16) (ou 5489(seize)) signifiera que l’on utilise la base seize.
Ainsi 5489 (seize) = 21641(dix).
Lorsque la base n’est pas précisée, on conviendra qu’il s’agit de la base 10.
D’autres conventions peuvent être utilisées dans les livres. Dans les langages informatiques, des conventions
sont également choisies, ces conventions ne sont pas nécessairement les mêmes dans les divers langages.
Par exemple, dans le langage Python, 5489(16) sera noté 0x5489 (les chiffres sont précédés du chiffre 0 et
de la lettre x minuscule).
De même, les chiffres d’un entier écrit en base deux seront précédés de 0b et les chiffres d’un entier écrit en
base huit seront précédés de 0o
A retenir :
Soit b un entier au moins égal à 2. Tout entier naturel n peut s’écrire sous la forme d’une somme de termes
de la forme 𝑥𝑖 𝑏 𝑖 où les nombres i sont des entiers naturels et les nombres 𝑥𝑖 sont des entiers naturels compris
entre 0 et b - 1. Les entiers entre 0 et b - 1 constituent les chiffres de la base b.
Ainsi les chiffres des écritures en base 2 sont 0 et 1.
Les chiffres de la base 5 sont 0, 1, 2, 3, 4.
Les chiffres de la base 10 sont 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.
Exercice 3
Donner en base dix les entiers 101(deux) , 1110(deux) .
Exercice 4
1. Quels entiers naturels peut-on écrire en binaire sur un octet ?
2. Quels entiers naturels peut-on écrire en binaire sur un mot de 32 bits ?
3. Quels entiers naturels peut-on écrire en binaire sur un mot de 64 bits ?
Exercice 5
Les chiffres en base 16 sont habituellement notés 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Expliquer
pourquoi on utilise de nouveaux symboles pour désigner 10, 11, 12, 13, 14, 15 dans cette base.
De la base b à la base 10
Exercice 6
Traduire en base 10 les entiers suivants :
𝑎1 = 1𝐴216 ; 𝑎2 = 4315 ; 𝑎3 = 102 ; 𝑎4 = 105 ; 𝑎5 = 10112
On peut les obtenir avec python avec le code suivant :
Python
1 print( int ( ’1A2 ’ ,16))
2 print (int ( ’431’,5))
3 print (int ( ’10’ ,2))
4 print (int ( ’10 ’ ,5))
5 print (int ( ’ 1011 ’ ,2))
ou encore :
.
Python
1 print (0x1A2)
3 print (0b10)
5 print (0b1011)
Exercice 7
Voici un programme python :
# -*- coding : utf-8 -*def f1(n):
s=0
lg=len(n)
for j in range(0,lg):
s+=int(n[lg-j-1])*2**j
return str(s)
mot=input ()
print(f1(mot))
1 - Que fait ce programme python ?
Copiez le et commentez-le plus précisément possible (ligne à ligne). Vous pouvez le faire « tourner »…
Attention : dans quel cas « fonctionne »-t-il ?
De la base 10 à la base b : La méthode des divisions en cascade
Propriété : La division euclidienne
Pour tout couple d’entiers naturels (a;b) avec ∈ ℕ 𝑒𝑡 𝑏 ∈ ℕ∗ . il existe un unique couple (q; r ) d’entiers tels
a = bq +r et 0 ≤ 𝑟 ≤ 𝑏 − 1. q est appelé quotient de la division euclidienne (on parle aussi de division
entière) de a par b et r reste de cette division.
Exemple : 34 = 9 × 3 + 7, le reste de la division euclidienne de 34 par 9 est donc 7. Par contre le reste de
la division euclidienne de 34 par 3 n’est pas 7 (car le reste dans une division euclidienne par 3 ne peut valoir
que 0, 1 ou 2).
On « rappelle » qu’en python le reste de la division euclidienne de a (de type int) par b (de type int) est
obtenu par l’instruction a%b et le quotient de a par b par a//b..
Propriété 2 :
Le chiffre des unités (c’est à dire le coefficient de 𝑏 0 ) de l’entier n en base b est égal au reste de la division
euclidienne de n par b.
Pour expliquer le principe de l’algorithme des divisions en cascade, traitons un exemple en base b = 5.
Soit 𝑞0 = 482 = 3412(5) = 3 × 53 + 4 × 52 + 1 × 51 + 2
On peut écrire : 482 = (3 × 52 + 4 × 51 + 1) × 5 + 2
On a ainsi écrit 482 sous la forme 5𝑞1 + 𝑟0 où 𝑟0 = 2 et 𝑞1 = 3 × 52 + 4 × 51 + 1.
Comme 𝑟0 est un chiffre de l’écriture en base 5, il est compris entre 0 et 4 et l’écriture 5𝑞1 + 𝑟0 permet alors
d’affirmer que 𝑟0 est le reste de la division euclidienne de 482 par 5.
Considérons maintenant l’entier 𝑞1 = 3 × 52 + 4 × 51 + 1 = 96 (c’est à dire le quotient de la division de 𝑞0
par 5). On peut, sur cet entier 96, recommencer le même traitement que sur l’entier 482 :
96 = (3 × 5 + 4) × 5 + 1.
Ainsi le chiffre des unités de 96 en base 5 est le reste de la division entière de 96 par 5. Et si l’on reporte
l’écriture précédente de 96 dans l’écriture de 482, on a : 482=((3 × 5 + 4) × 5 + 1) × 5 + 𝑟0, on constate
que le chiffre 1 est le coefficient de 51 dans l’écriture de 482.
Exercice 8
Donc, en utilisant ces propriétés, déterminer une manière de donner l’écriture du nombre 13 en base deux,
puis de 75 en base deux.
On obtient donc l’algorithme des divisions en cascade :
Soit b≥2 un entier et n ∈ ℕ.
1. On calcule le reste r0 de la division entière de n par b et le quotient q1.
2. On calcule le reste r1 de la division entière de q1 par b et le quotient q2.
3. On calcule le reste r2 de la division entière de q2 par b et le quotient q3.
4. . . .
5. Et ainsi de suite jusqu’à obtenir un quotient nul qj .
Exercice 9.
Au choix :
9.1 – Développer en python l’algorithme de divisions en cascade et le tester.
9.2 – Prendre connaissance du code Python ci-dessous et le commenter. Puis le modifier de manière à avoir
une fonction qui permette de transcrire un nombre en base 10 en ce même nombre en une autre base au
choix.
# -*- coding : utf-8 -*def cascade(n):
nb=int(n)
bin ' '
while nb>1 :
bin=str(nb%2)+bin
nb=nb//2
bin=str(nb)+bin
return bin
nombredec=input('entrer un nombre en base 10 :')
mot=(cascade(nombredec))
print((mot))
Téléchargement