Article de reference

Format de numéro d'ordinateur

Un format de nombre informatique est la représentation interne des valeurs numériques dans le matériel et les logiciels des appareils numériques, tels que les ordinateurs progra...

Un format de nombre informatique est la représentation interne des valeurs numériques dans le matériel et les logiciels des appareils numériques, tels que les ordinateurs programmables et les calculatrices . Les valeurs numériques sont stockées sous forme de groupements de bits , tels que des octets et des mots. Le codage entre les valeurs numériques et les modèles de bits est choisi pour faciliter le fonctionnement de l'ordinateur ; le codage utilisé par le jeu d'instructions de l'ordinateur nécessite généralement une conversion pour une utilisation externe, comme pour l'impression et l'affichage. Différents types de processeurs peuvent avoir différentes représentations internes des valeurs numériques et différentes conventions sont utilisées pour les nombres entiers et réels. La plupart des calculs sont effectués avec des formats de nombres qui s'insèrent dans un registre de processeur, mais certains systèmes logiciels permettent la représentation de nombres arbitrairement grands en utilisant plusieurs mots de mémoire.

Représentation des nombres binaires

Les ordinateurs représentent les données sous forme d'ensembles de chiffres binaires. La représentation est composée de bits, eux-mêmes regroupés en ensembles plus grands tels que les octets.

Tableau 1 : Conversion de binaire en octal
Chaîne binaire Valeur octale
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7
Tableau 2 : Nombre de valeurs pour une chaîne de bits.
Longueur de la chaîne de bits (b) Nombre de valeurs possibles (N)
1 2
2 4
3 8
4 16
5 32
6 64
7 128
8 256
9 512
10 1024
...

Un bit est un chiffre binaire qui représente l'un des deux états . Le concept de bit peut être compris comme une valeur de 1 ou 0 , activée ou désactivée , oui ou non , vraie ou fausse , ou codée par un commutateur ou une bascule d'une certaine sorte.

Alors qu'un seul bit ne peut représenter que deux valeurs, une chaîne de bits peut être utilisée pour représenter des valeurs plus importantes. Par exemple, une chaîne de trois bits peut représenter jusqu'à huit valeurs distinctes, comme illustré dans le tableau 1.

À mesure que le nombre de bits composant une chaîne augmente, le nombre de combinaisons possibles de 0 et 1 augmente de manière exponentielle . Un seul bit ne permet que deux combinaisons de valeurs, deux bits combinés peuvent donner quatre valeurs distinctes, trois bits pour huit, et ainsi de suite, en augmentant avec la formule 2 n . Le nombre de combinaisons possibles double à chaque chiffre binaire ajouté, comme illustré dans le tableau 2.

Les groupements avec un nombre spécifique de bits sont utilisés pour représenter différentes choses et ont des noms spécifiques.

Un octet est une chaîne de bits contenant le nombre de bits nécessaires pour représenter un caractère . Sur la plupart des ordinateurs modernes, il s'agit d'une chaîne de huit bits. Étant donné que la définition d'un octet est liée au nombre de bits composant un caractère, certains ordinateurs plus anciens ont utilisé une longueur de bit différente pour leur octet. Dans de nombreuses architectures informatiques , l'octet est la plus petite unité adressable , l'atome d'adressabilité, par exemple. Par exemple, même si les processeurs 64 bits peuvent adresser la mémoire soixante-quatre bits à la fois, ils peuvent toujours diviser cette mémoire en morceaux de huit bits. C'est ce qu'on appelle la mémoire adressable par octet. Historiquement, de nombreux processeurs lisent les données dans un multiple de huit bits. Étant donné que la taille d'octet de huit bits est si courante, mais que la définition n'est pas normalisée, le terme octet est parfois utilisé pour décrire explicitement une séquence de huit bits.

Un quartet (parfois nybble ) est un nombre composé de quatre bits. Étant un demi-octet , le quartet a été nommé ainsi en tant que jeu de mots. Une personne peut avoir besoin de plusieurs quartets pour une bouchée de quelque chose ; de même, un quartet est une partie d'un octet. Étant donné que quatre bits permettent d'obtenir seize valeurs, un quartet est parfois appelé chiffre hexadécimal .

Affichage des nombres octaux et hexadécimaux

Les codages octal et hexadécimal sont des moyens pratiques de représenter les nombres binaires, tels qu'utilisés par les ordinateurs. Les ingénieurs informaticiens ont souvent besoin d'écrire des quantités binaires, mais dans la pratique, écrire un nombre binaire tel que 1001001101010001 est fastidieux et sujet à des erreurs. Par conséquent, les quantités binaires sont écrites dans un format numérique en base 8, ou « octal », ou, beaucoup plus couramment, en base 16, « hexadécimal » ( hex ). Dans le système décimal, il y a 10 chiffres, de 0 à 9, qui se combinent pour former des nombres. Dans un système octal, il n'y a que 8 chiffres, de 0 à 7. Autrement dit, la valeur d'un « 10 » octal est la même que celle d'un « 8 » décimal, celle d'un « 20 » octal est celle d'un « 16 » décimal, et ainsi de suite. Dans un système hexadécimal, il y a 16 chiffres, de 0 à 9 suivis, par convention, de A à F. Autrement dit, un « 10 » hexadécimal est identique à un « 16 » décimal et un « 20 » hexadécimal est identique à un « 32 » décimal. Un exemple et une comparaison de nombres dans différentes bases sont décrits dans le tableau ci-dessous.

Lors de la saisie de nombres, des caractères de formatage sont utilisés pour décrire le système numérique, par exemple 000_0000B ou 0b000_00000 pour les nombres binaires et 0F8H ou 0xf8 pour les nombres hexadécimaux.

Conversion entre les bases

Tableau 3 : Comparaison des valeurs dans différentes bases
Décimal Binaire Octal Hexadécimal
0 000000 00 00
1 000001 01 01
2 000010 02 02
3 000011 03 03
4 000100 04 04
5 000101 05 05
6 000110 06 06
7 000111 07 07
8 001000 10 08
9 001001 11 09
10 001010 12 0A
11 001011 13 0B
12 001100 14 0C
13 001101 15 0D
14 001110 16 0E
15 001111 17 0F

Chacun de ces systèmes numériques est un système positionnel, mais alors que les poids décimaux sont des puissances de 10, les poids octaux sont des puissances de 8 et les poids hexadécimaux sont des puissances de 16. Pour convertir du système hexadécimal ou octal au système décimal, pour chaque chiffre, on multiplie la valeur du chiffre par la valeur de sa position, puis on additionne les résultats. Par exemple :

Représenter des fractions en binaire

Nombres à virgule fixe

Le formatage à virgule fixe peut être utile pour représenter des fractions en binaire.

Le nombre de bits nécessaires à la précision et à la plage souhaitées doit être choisi pour stocker les parties fractionnaires et entières d'un nombre. Par exemple, en utilisant un format 32 bits, 16 bits peuvent être utilisés pour l'entier et 16 pour la fraction.

Le bit huit est suivi du bit quatre, puis du bit deux, puis du bit un. Les bits fractionnaires continuent le modèle défini par les bits entiers. Le bit suivant est le bit demi, puis le bit quart, puis le bit ⅛, et ainsi de suite. Par exemple :

bits entiers bits fractionnaires
0,500 = 1/2 = 00000000 00000000,10000000 00000000
1.250 = ⁠1+1/4 = 00000000 00000001.01000000 00000000
7.375 = ⁠7+3/8 = 00000000 00000111.01100000 00000000

Cette forme de codage ne peut pas représenter certaines valeurs en binaire. Par exemple, la fraction 1/5 , 0,2 en décimal, les approximations les plus proches seraient les suivantes :

13107 / 65536 = 00000000 00000000.00110011 00110011 = 0,1999969... en décimal
13108 / 65536 = 00000000 00000000.00110011 00110100 = 0,2000122... en décimal

Même si davantage de chiffres sont utilisés, une représentation exacte est impossible. Le nombre 1/3 , écrit en décimal comme 0,333333333..., continue indéfiniment. Si elle est interrompue prématurément, la valeur ne représenterait pas 1/3 précisément.

Nombres à virgule flottante

Bien que les systèmes numériques utilisent à la fois des entiers signés et non signés, même un entier de 32 bits ne suffit pas à gérer toute la plage de nombres qu'une calculatrice peut gérer, et cela n'inclut même pas les fractions. Pour approcher la plage et la précision supérieures des nombres réels , nous devons abandonner les entiers signés et les nombres à virgule fixe et passer à un format « à virgule flottante ».

Dans le système décimal, nous connaissons les nombres à virgule flottante de la forme ( notation scientifique ) :

1,1030402 × 10 5 = 1,1030402 × 100000 = 110304,02

ou, de manière plus compacte :

1.1030402E5

ce qui signifie "1,1030402 fois 1 suivi de 5 zéros". Nous avons une certaine valeur numérique (1,1030402) appelée " mantisse ", multipliée par une puissance de 10 (E5, signifiant 10 5 ou 100 000), appelée " exposant ". Si nous avons un exposant négatif, cela signifie que le nombre est multiplié par un 1 placé plusieurs fois à droite de la virgule décimale. Par exemple :

2,3434E−6 = 2,3434 × 10 −6 = 2,3434 × 0,000001 = 0,0000023434

L'avantage de ce schéma est qu'en utilisant l'exposant, nous pouvons obtenir une plage de nombres beaucoup plus large, même si le nombre de chiffres de la mantisse, ou la « précision numérique », est bien plus petit que la plage. Des formats de virgule flottante binaire similaires peuvent être définis pour les ordinateurs. Il existe un certain nombre de ces schémas, le plus populaire a été défini par l'Institute of Electrical and Electronics Engineers (IEEE). La spécification standard IEEE 754-2008 définit un format de virgule flottante 64 bits avec :

  • un exposant binaire de 11 bits, utilisant le format « excess-1023 ». Excess-1023 signifie que l'exposant apparaît comme un entier binaire non signé de 0 à 2047 ; la soustraction de 1023 donne la valeur signée réelle
  • un significande de 52 bits, également un nombre binaire non signé, définissant une valeur fractionnaire avec un « 1 » implicite en tête
  • un bit de signe, donnant le signe du nombre.

Avec les bits stockés dans 8 octets de mémoire :

octet 0 S x10 x9 x8 x7 x6 x5 x4
octet 1 x3 x2 x1 x0 m51 m50 m49 m48
octet 2 m47 m46 m45 m44 m43 m42 m41 m40
octet 3 m39 m38 m37 m36 m35 m34 m33 m32
octet 4 m31 m30 m29 m28 m27 m26 m25 m24
octet 5 m23 m22 m21 m20 m19 m18 m17 m16
octet 6 m15 m14 m13 m12 m11 m10 m9 m8
octet 7 m7 m6 m5 m4 m3 m2 m1 m0

où « S » désigne le bit de signe, « x » désigne un bit d'exposant et « m » désigne un bit de mantisse. Une fois les bits extraits, ils sont convertis avec le calcul :

<signe> × (1 + <significande fractionnaire>) × 2 <exposant> − 1023

Ce schéma fournit des nombres valables jusqu'à environ 15 chiffres décimaux, avec la plage de nombres suivante :

maximum minimum
positif 1.797693134862231E+308 4.940656458412465E-324
négatif -4.940656458412465E-324 -1.797693134862231E+308

La spécification définit également plusieurs valeurs spéciales qui ne sont pas des nombres définis et qui sont connues sous le nom de NaN , pour « Not A Number » (pas un nombre). Elles sont utilisées par les programmes pour désigner des opérations non valides et autres.

Certains programmes utilisent également des nombres à virgule flottante de 32 bits. Le schéma le plus courant utilise une mantisse de 23 bits avec un bit de signe, plus un exposant de 8 bits au format « excess-127 », ce qui donne sept chiffres décimaux valides.

octet 0 S x7 x6 x5 x4 x3 x2 x1
octet 1 x0 m22 m21 m20 m19 m18 m17 m16
octet 2 m15 m14 m13 m12 m11 m10 m9 m8
octet 3 m7 m6 m5 m4 m3 m2 m1 m0

Les bits sont convertis en valeur numérique avec le calcul :

<signe> × (1 + <significande fractionnaire>) × 2 <exposant> − 127

conduisant à la plage de nombres suivante :

maximum minimum
positif 3.402823E+38 2.802597E-45
négatif -2.802597E-45 -3.402823E+38

Ces nombres à virgule flottante sont généralement appelés « réels » ou « flotteurs », mais avec un certain nombre de variantes :

Une valeur flottante de 32 bits est parfois appelée « real32 » ou « single », ce qui signifie « valeur à virgule flottante simple précision ».

Un flottant de 64 bits est parfois appelé « real64 » ou « double », ce qui signifie « valeur à virgule flottante double précision ».

La relation entre les nombres et les modèles de bits est choisie pour des raisons de commodité dans la manipulation informatique ; huit octets stockés dans la mémoire de l'ordinateur peuvent représenter un nombre réel de 64 bits, deux nombres réels de 32 bits, quatre entiers signés ou non signés, ou tout autre type de données qui tient dans huit octets. La seule différence réside dans la façon dont l'ordinateur les interprète. Si l'ordinateur stockait quatre entiers non signés puis les relisait en mémoire sous forme de nombre réel de 64 bits, il s'agirait presque toujours d'un nombre réel parfaitement valide, même s'il s'agirait de données inutiles.

Seule une plage finie de nombres réels peut être représentée avec un nombre donné de bits. Les opérations arithmétiques peuvent déborder ou être inférieures à la capacité maximale autorisée, produisant ainsi une valeur trop grande ou trop petite pour être représentée.

La représentation a une précision limitée. Par exemple, seuls 15 chiffres décimaux peuvent être représentés avec un nombre réel de 64 bits. Si un très petit nombre à virgule flottante est ajouté à un grand nombre, le résultat est uniquement le grand nombre. Le petit nombre était trop petit pour s'afficher avec une résolution de 15 ou 16 chiffres, et l'ordinateur le rejette effectivement. L'analyse de l'effet d'une précision limitée est un problème bien étudié. Les estimations de l'ampleur des erreurs d'arrondi et les méthodes pour limiter leur effet sur les calculs volumineux font partie de tout projet de calcul de grande envergure. La limite de précision est différente de la limite de portée, car elle affecte la mantisse, et non l'exposant.

La mantisse est une fraction binaire qui ne correspond pas nécessairement parfaitement à une fraction décimale. Dans de nombreux cas, une somme de puissances réciproques de 2 ne correspond pas à une fraction décimale spécifique, et les résultats des calculs seront légèrement décalés. Par exemple, la fraction décimale « 0,1 » est équivalente à une fraction binaire se répétant à l'infini : 0,000110011 ...

Les nombres dans les langages de programmation

La programmation en langage assembleur nécessite que le programmeur conserve une trace de la représentation des nombres. Lorsque le processeur ne prend pas en charge une opération mathématique requise, le programmeur doit élaborer un algorithme et une séquence d'instructions appropriés pour effectuer l'opération ; sur certains microprocesseurs, même la multiplication d'entiers doit être effectuée par logiciel.

Les langages de programmation de haut niveau tels que Ruby et Python proposent un nombre abstrait qui peut être un type étendu tel que rational , bignum ou complex . Les opérations mathématiques sont effectuées par des routines de bibliothèque fournies par l'implémentation du langage. Un symbole mathématique donné dans le code source, par surcharge d'opérateur , invoquera un code objet différent approprié à la représentation du type numérique ; les opérations mathématiques sur n'importe quel nombre, qu'il soit signé, non signé, rationnel, à virgule flottante, à virgule fixe, intégral ou complexe, sont écrites exactement de la même manière.

Certains langages, tels que REXX et Java , proposent des opérations à virgule flottante décimale, qui génèrent des erreurs d'arrondi sous une forme différente.

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index