Représentation binaire de l'information

Definition du codage

DéfinitionFaire du codage consiste à transformer une représentation des données en une autre. (source wiki)

L'usage est nombreux, citons au moins 3 usages :

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éfinitionUn bit est l'unité de base du systéme binaire il contient un 0 ou un 1
DéfinitionUn octet est formé de 8 bits.
DéfinitionEn 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.

Ensuite si a b c d e ... sont des chiffres de la bases n alors:

abc,defg... = a×n2 + 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 :

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 :

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.


Notation hexadécimale.


Q.C.M.

Le nombre 1010 1101\(_2\) représente un nombre décimal égal à :





Q.C.M.

Le nombre décimal \(72_{10}\) est égal à :





Q.C.M.

Le nombre \(B8_{16}\) vaut:





Q.C.M.

\(756_8\)





Coder un entier relatif.

Deux méthodes.

Pour coder un entier relatif dans par exemple un octet : on peut envisager deux idées :

La méthode "naive".

On réserve un bit pour le signe et les sept autres sont pour la valeur absolue du nombre, on peut alors représenter un nombre entre -127 et +127

Essayez :

La méthode a au moins deux inconvénients :

  1. Le 0 à deux représentations.
  2. Il faut faire un circuit pour effectuer l'addition de deux nombres il faut plusieurs circuits (cas positif avec positif, cas positif avec negatif).

Le complément à 2.

Avec la méthode on peut stocker dans n bits des nombres entier de \((-2)^{n-1}\) à \(2^n-1\) de la façon suivante :

Essayez :

    Remarques :
  1. Le 0 a une seule représentation.
  2. Le premier bit donne toujours le signe.
  3. Un seul circuit pour l'addition.
  4. La représentation n'est pas artificielle, au contraire (voir remarque suivante).
Remarque montre

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 (ai) les bits en mémoire du nombre positif n représenté
Soit (bi) les bits en mémoire d'un autre nombre de même taille.
Pour tous les bits ai du nombre du départ :
Si ai 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.

Q.C.M.

En complement à 2, l'octet 10111111 vaut :





Q.C.M.

En complément à 2, l'octet 00100101 vaut :





Q.C.M.

En complément à 2, l'octet qui représente -100 est :





Q.C.M.

En complément à 2, l'octet qui représente -1 est :





Exercice
  1. Que vaut 011102 en décimal ?
  2. Que vaut A0B216 en décimal ?
  3. Que vaut 60 en décimal en hexadécimal ? En binaire ?
  4. Que vaut 1010102 + 110012 ?
  5. Que vaut 1010102 × 110012 ?