Représentation binaire de l'information
Definition du codage
Définition Faire du codage consiste à transformer une représentation des données en une autre. (source wiki)
L'usage est nombreux, citons au moins 3 usages :
Cryptographie
On transforme une information dans le but de la rendre incompréhensible par une tierce personne.
Compression
On transforme une information pour diminuer sa taille.
Stockage
On transforme une information pour pouvoir la stocker (mais aussi la transporter).
C'est le dernier usage qui va nous être utile ici les différentes mémoires d'un ordinateur (disque dur clef, USB,mémoire vive,...) peuvent se voir comme des milliards de petites cases pouvant contenir au maximum deux informations : soit 0 soit 1.
Des définitions.
Définition Un bit est l'unité de base du systéme binaire il contient un 0 ou un 1
Définition Un octet est formé de 8 bits.
Définition En informatique l'unité la plus petite que l'on peut manipuler est appelé byte , généralement c'est l'octet.
Coder un entier positif
Codage en base n.
Pour coder en base n il nous faut n symboles appelés chiffres.
En base 10 : 0 1 2 3 4 5 6 7 8 9
En base 2 : 0 1
En base 16 : 0 1 2 3 4 5 6 7 8 9 A (=10) B (=11) C (=12) D (=13) E (=14) F (=15)
Ensuite si a b c d e ... sont des chiffres de la bases n alors:
a b c ,d e f g ... = a ×n 2 + b ×n + c ×1 + e ×n -1 + f ×n -2 + g ×n -3 ...
Exemple
Comment obtenir l'écriture en base n d'un nombre ?
Algo
Prenons l'exemple de la base 2 et donnons deux remarques :
Si le chiffre des unité est 0 alors le nombre est pair.
Pour diviser par deux (de façon entière c'est à dire en ne s'occupant pas d'après la virgule) il suffit de supprimer le nombre des unités.
A l'aide de ses deux remarques on considère l'algo suivant :
a contient le nombre décimal à obtenir en base 2
Tant que a est non nul:
Si a est pair :
On écrit 0
Sinon
On écrit 1
On calcul a/2 (division entière) et on affecte la valeur dans a
L'algorithme nous donne le nombre à l'envers, essayez :
0 | 0
Remarque
Mathématiquement un nombre entier peut comporter un nombre arbitrairement grand de chiffres, dans un ordinateur le nombre est stocké dans la mémoire qui est forcément limitée donc on ne peut pas stocker des nombres trop grands. Sur la grande majorité des langages (comme le C,C++,Java,...) les entiers sont stockés dans un nombre fixé d'octets :
Dans 1 octet = 8 bits (type unsigned char en C) : on a donc \(2^8 = 256\) nombres possibles, on peut stocker des nombres de 0 à 255.
Dans 4 octets = 32 bits (type unsigned int en C) : on a donc \(2^{32} = 4 \ 294\ 967\ 296\) nombres possibles, on peut stocker des nombres de 0 à 4 294 967 295.
En C si le nombre 0 est stockée dans une variable de type unsigned int alors il va prendre 4 octets (32 fois le bit 0), si on veut stocker 256 dans une variable unsigned char alors on stocke en réalité le nombre 0.
En python les entiers sont stockés différemment et peuvent être plus grand, cela va dans la philosophie de python (haut niveau) en entier est stocké dans une variable particulière de type int.
Essayer avec 32 bits :
Vidéos
Comment passer du décimal au binaire et réciproquement.
VIDEO
Notation hexadécimale.
VIDEO
Q.C.M.
Le nombre 1010 1101\(_2\) représente un nombre décimal égal à :
171
173
181
184
Q.C.M.
Le nombre décimal \(72_{10}\) est égal à :
\(48_{16}\)
\(A6_{16}\)
\(01001000_2\)
\(01000100_2\)
Q.C.M.
Le nombre \(B8_{16}\) vaut:
\(10111000_2\)
\(185_{10}\)
\(11011000_2\)
\(184_{10}\)
Q.C.M.
\(756_8\)
\(756_{10}\)
\(494_{10}\)
\(7568_{10}\)
\(523_{10}\)
Coder un entier relatif.
Deux méthodes.
Pour coder un entier relatif dans par exemple un octet : on peut envisager deux idées :
Remarque
Pour lire l'heure, nous avons parfois deux choix par exemple 7h55 et 8h-5 sont deux façons différente de décrire le même moment.
En mathématiques en formalise ca avec l’algèbre modulaire (ou les mathématiques de l'horloge).
Imaginons une pendule et mesurons les heures, (on dit que l'on travaille dans \(\mathbb{Z}\)/12\(\mathbb{Z}\)) alors -2 correspond à un recul de 2h et on arrive sur 10, on écrit -2 \(\equiv\) 10 [\(\mathbb{Z}\)/12\(\mathbb{Z}\)] (-2 congrue à 10 modulo 12). Dans \(\mathbb{Z}\)/12\(\mathbb{Z}\) on peut additionner, multiplier, soustraire (mais pas toujours diviser) de façon naturelle.
Par exemple 10+14 \(\equiv\) -2 + 2 \(\equiv\) 0 et 30 × 11 \(\equiv\) 3 × 10 × 11 \(\equiv\) 3 × -2 * -1 \(\equiv\) 6.
Dans l'ordinateur on ne travaille pas avec des entiers mais avec ce genre de représentation (sauf en python), si on stocke les entiers sur 1 octet alors on est dans \(\mathbb{Z}\)/12\(\mathbb{Z}\), si on ne veut que des positifs alors on prendra les représentant de 0 à 257, et si on veut des négatifs aussi
alors à partir de 128 on utilise des représentants négatifs donc -1 ce code de la même façon que 255 en unsigned, -2 de la même façon que 254 en unsigned et ainsi de suite -128 ce code comme 128.
Les opérations sur les variables de type int sont les opérations de mathématiques de l'horloge, ainsi si on décide de faire de nombreuses fois +1 à un nombre positif on va obtenir un nombre négatif !
Comment obtenir l'opposé d'un nombre par complément à 2.
Algo
Une première méthode pour trouver l'opposé d'un nombre positif n consiste à coder le \(2^{nb bits}-n\) où nb_bits est le nombre de bits où on souhaite coder.
Pour une autre méthode donnons remarquons que la somme des du nombre et de son opposé vaut 0 donc doit être présenté qu'avec des 0 donc :
Soit (a
i ) les bits en mémoire du nombre positif n représenté
Soit (b
i ) les bits en mémoire d'un autre nombre de même taille.
Pour tous les bits a
i du nombre du départ :
Si a
i vaut 0 :
bi = 1
Sinon
bi = 0
On ajoute 1 aux (bi )
Exemple
Entrer le nombre du début :
On remplace les 1 par des 0 et réciproquement :
On ajoute 1 pour obtenir la réponse.
Vidéos
Représenter des entiers signés.
VIDEO
Q.C.M.
En complement à 2, l'octet 10111111 vaut :
191
-191
-66
-65
Q.C.M.
En complément à 2, l'octet 00100101 vaut :
-37
37
219
-219
Q.C.M.
En complément à 2, l'octet qui représente -100 est :
11100100
10011100
01100100
10101000
Q.C.M.
En complément à 2, l'octet qui représente -1 est :
11111111
10000001
00000011
10000001
Exercice
Que vaut 011102 en décimal ?
Que vaut A0B216 en décimal ?
Que vaut 60 en décimal en hexadécimal ? En binaire ?
Que vaut 1010102 + 110012 ?
Que vaut 1010102 × 110012 ?
phpMyVisites | Open source web analytics