Article de reference

Entier (informatique)

En informatique , un entier est une donnée de type entier , un type de données représentant un intervalle d' entiers mathématiques . Les types de données entiers peuvent avoir d...

En informatique , un entier est une donnée de type entier , un type de données représentant un intervalle d' entiers mathématiques . Les types de données entiers peuvent avoir différentes tailles et peuvent ou non contenir des valeurs négatives. Les entiers sont généralement représentés dans un ordinateur par un groupe de chiffres binaires (bits). La taille de ce groupement varie, de sorte que l'ensemble des tailles d'entiers disponibles diffère selon les types d'ordinateurs. Le matériel informatique offre presque toujours la possibilité de représenter un registre de processeur ou une adresse mémoire par un entier.

Dans le code source d'un programme , une valeur entière est généralement spécifiée sous forme d'une séquence de chiffres, éventuellement précédée des signes + ou −. Certains langages de programmation autorisent d'autres notations, comme l'hexadécimal (base 16) ou l'octal (base 8). Certains langages de programmation permettent également l' utilisation de séparateurs de groupes de chiffres .

La représentation interne de cette donnée correspond à la manière dont sa valeur est stockée dans la mémoire de l'ordinateur. Contrairement aux nombres entiers mathématiques, une donnée informatique classique possède une valeur minimale et une valeur maximale possibles.

La représentation la plus courante d'un entier positif est une chaîne de bits , utilisant le système binaire . L'ordre des octets mémoire stockant les bits varie ; voir l'endianness . La largeur , la précision ou le nombre de bits d'un type entier correspond au nombre de bits utilisés pour sa représentation. Un type entier de n bits peut coder 2ⁿ nombres ; par exemple, un type non signé représente généralement les valeurs non négatives de 0 à le décimal codé binaire (DCB) code Gray ou encore des codes de caractères imprimés tels que l'ASCII .

Il existe quatre méthodes courantes pour représenter les nombres signés dans un système de calcul binaire. La plus répandue est le complément à deux , qui permet à un entier signé de n bits de représenter les nombres de correspondance biunivoque parfaite entre les représentations et les valeurs (en particulier, pas de distinction entre +0 et −0 ), et car l'addition , la soustraction et la multiplication n'ont pas besoin de faire de distinction entre les types signés et non signés. Parmi les autres possibilités, on trouve le binaire décalé , le binaire signe-magnitude et le complément à un .

Certains langages informatiques définissent la taille des entiers indépendamment de la machine ; d’autres proposent des définitions variables selon la taille des mots du processeur sous-jacent. Toutes les implémentations de langages ne définissent pas de variables de toutes les tailles entières, et les tailles définies peuvent même ne pas être distinctes au sein d’une même implémentation. Un entier défini dans un langage de programmation peut avoir une taille différente dans un autre langage, sur un autre processeur ou dans un contexte d’exécution de taille différente ; voir architectures informatiques anciennes utilisaient des représentations décimales des entiers, stockées en décimal codé binaire (BCD) ou dans un autre format. Ces valeurs nécessitent généralement une taille de données de 4 bits par chiffre décimal (parfois appelé quartet ), généralement avec des bits supplémentaires pour le signe. De nombreux processeurs modernes offrent une prise en charge limitée des entiers décimaux en tant que type de données étendu, fournissant des instructions pour convertir ces valeurs en valeurs binaires et inversement. Selon l'architecture, les entiers décimaux peuvent avoir une taille fixe (par exemple, 7 chiffres décimaux plus un signe tiennent dans un mot de 32 bits) ou une longueur variable (jusqu'à une taille maximale de chiffre), occupant généralement deux chiffres par octet.

Types de données intégrales communes

MorceauxNomPlage (en supposant le complément à deux pour les nombres signés )Chiffres décimauxUtilisationsMises en œuvre
C / C++C#Pascal et DelphesJavaSQL FORTRANDRouiller
4nibble , semi-octetSigné : De −8 à 7, de −(2 3 ) àDécimalcodé binaire ,
Non signé : De 0 à 15, ce qui équivaut 8octet , octet , i8, u8Signé : De −128 à 127, de −(2 7 ) à Caractères ASCII , unités de code de l' encodage de caractères UTF-8int8_t, signed charsbyte,System.SByteShortintbyte,java.lang.BytetinyintINTEGERbytei8
Non signé : De 0 à 255, ce qui équivaut 16demi-mot, mot , court, i16, u16Signé : De −32 768 à 32 767, de −(2 15 ) à Caractères UCS-2 , unités de code dans l' encodage de caractères UTF-16int16_t, short, intshort,System.Int16Smallintshort,java.lang.ShortsmallintINTEGERshorti16
Non signé : De 0 à 65 535, ce qui équivaut 32mot, long , double mot, mot long, entier, i32, u32Signé : De −2 147 483 648 à 2 147 483 647 , de −(2 31 ) à Caractères UTF-32 , couleurs vraies avec canal alpha, FourCC , pointeurs en calcul 32 bitsint32_t, int, longint,System.Int32LongInt; Integerint,java.lang.IntegerintINTEGERinti32
Non signé : De 0 à 4 294 967 295, ce qui équivaut à 64mot, double mot, mot long, long, très long, quad, mot quadruple, mot q, int64, i64, u64Signé : De Temps (par exemple, époque Unix) , pointeurs en informatique 64 bitsint64_t, long, long longlong,System.Int64Int64long,java.lang.LongbigintINTEGERlongi64
Non signé : De 0 à 128octaword, double quadword, i128, u128Signé : De Adresses IPv6 , GUID

Disponible uniquement en tant qu'extensions non standard ou spécifiques au compilateurcenti128
Non signé : De 0 à nEntier n bits (cas général)Signé : −(2 n −1 ) à ( ( Ada :n log 10 2C23 :unsigned _BitInt(n)Ada : , ; bibliothèques standard ou bibliothèques arithmétiques arbitraires tierces ou classes dans de nombreux langages tels que Python, C++, etc.Les processeurs prennent en charge différents types de données entières. Généralement, le matériel supporte les types signés et non signés, mais seulement un nombre limité et fixe de valeurs possibles.

Le tableau ci-dessus répertorie les largeurs de types entiers prises en charge matériellement par les processeurs courants. Les langages de programmation de haut niveau offrent davantage de possibilités. Il est fréquent de disposer d'un type entier « double largeur » possédant deux fois plus de bits que le type le plus large pris en charge matériellement. De nombreux langages proposent également des types de champs de bits (un nombre spécifié de bits, généralement inférieur à la largeur maximale prise en charge matériellement) et des types d'intervalle (qui ne peuvent représenter que les entiers compris dans un intervalle spécifié).

Certains langages, comme Lisp , Smalltalk , REXX , Haskell , Python et Raku , prennent en charge les entiers à précision arbitraire (également appelés entiers à précision infinie ou grands nombres ). D'autres langages, qui ne prennent pas en charge ce concept de manière native, peuvent proposer des bibliothèques permettant de représenter de très grands nombres à l'aide de tableaux de variables plus petites, comme la java.math.BigIntegerclasse `int` de Java ou le package `int` de Perlbigint . Ces bibliothèques utilisent la mémoire vive nécessaire au stockage des nombres ; cependant, la capacité de stockage d'un ordinateur étant limitée, elles ne peuvent représenter qu'un sous-ensemble fini des entiers mathématiques. Ces méthodes permettent de gérer des nombres très grands ; par exemple, un kilooctet de mémoire peut être utilisé pour stocker des nombres comportant jusqu'à 2 466 chiffres décimaux.

Un type booléen ne peut représenter que deux valeurs : 0 et 1, généralement associées respectivement à faux et vrai . Ce type peut être stocké en mémoire sur un seul bit, mais on lui alloue souvent un octet entier pour faciliter l’adressage et accélérer l’accès.

Une quantité de quatre bits est appelée un nibble (en référence à la taille d'une bouchée ) ou nybble (jeu de mots avec le mot octet ). Un nibble correspond à un chiffre en hexadécimal et contient un chiffre ou un code de signe en décimal codé binaire.

Octets et octets

réseaux informatiques , où des ordinateurs ayant des largeurs d'octets différentes peuvent être amenés à communiquer.

Dans l'usage moderne, byte signifie presque invariablement huit bits, puisque toutes les autres tailles sont tombées en désuétude ; ainsi byte est devenu synonyme d' octet .

Mots

architecture particulière . La taille d'un mot est donc spécifique au processeur. De nombreuses tailles de mots différentes ont été utilisées, notamment 6, 8, 12, 16, 18, 24, 32, 36, 39, 40, 48, 60 et 64 bits. Étant donné son caractère architectural, la taille d'un mot est généralement définie par le premier processeur d'une famille, plutôt que par les caractéristiques d'un processeur compatible ultérieur. La signification des termes dérivés de « mot » , tels que « longword » , « doubleword » , « quadword » et « halfword » , varie également selon le processeur et le système d'exploitation.

La quasi-totalité des nouveaux processeurs de bureau sont compatibles avec les mots de 64 bits, bien que les processeurs embarqués utilisant des mots de 8 et 16 bits restent courants. La longueur de mot de 36 bits était fréquente aux débuts de l'informatique.

Une cause importante de la non-portabilité des logiciels est l'hypothèse erronée que tous les ordinateurs ont la même taille de mot que celui utilisé par le programmeur. Par exemple, si un programmeur utilisant le langage C déclare incorrectement intune variable qui stockera des valeurs supérieures à 2 <sup>15 </sup> - 1, le programme échouera sur les ordinateurs utilisant des entiers 16 bits. Cette variable aurait dû être déclarée comme un entier long, qui possède au moins 32 bits sur n'importe quel ordinateur. Les programmeurs peuvent également supposer à tort qu'un pointeur peut être converti en entier sans perte d'information, ce qui peut fonctionner sur certains ordinateurs 32 bits, mais échouer sur les ordinateurs 64 bits avec des pointeurs 64 bits et des entiers 32 bits. Ce problème est résolu par C99 dans stdint.h sous la forme de `int` intptr_t.

L’ architecture (bits /bits) d’un programme peut faire référence à la taille des mots (ou au nombre de bits) du processeur sur lequel il s’exécute, ou à la largeur d’une adresse mémoire ou d’un pointeur, qui peut varier selon les modes d’exécution ou les contextes. Par exemple, les versions 64 bits de Microsoft Windows prennent en charge les binaires 32 bits existants, et les programmes compilés pour l’ABI x32 de Linux s’exécutent en mode 64 bits tout en utilisant des adresses mémoire 32 bits.

Entier standard

La taille standard des entiers dépend de la plateforme.

En C , il est noté intet doit être d'au moins 16 bits. Les systèmes Windows et Unix ont intdes registres 32 bits sur les architectures 32 bits et 64 bits.

Entier court

Un entier court peut représenter un nombre entier qui occupe moins d'espace de stockage, tout en ayant une plage de valeurs plus restreinte, comparé à un entier standard sur la même machine.

En C , il est noté `int` short. Il doit être codé sur au moins 16 bits et est souvent plus petit qu'un entier standard, mais cela n'est pas obligatoire. Un programme conforme peut supposer qu'il peut stocker en toute sécurité des valeurs comprises entre Java , `int` shortest API Windows , le type de données SHORTest défini comme un entier signé de 16 bits sur toutes les machines.

tailles d'entiers courts courantes
langage de programmationnom du type de donnéesSignatureTaille en octetsValeur minimaleValeur maximale
C et C++shortsigné2−32 767 +32 767
unsigned shortnon signé2065 535
C#shortsigné2−32 768+32 767
ushortnon signé2065 535
Javashortsigné2−32 768+32 767
SQLsmallintsigné2−32 768+32 767

Entier long

Un entier long peut représenter un entier dont la plage est supérieure ou égale à celle d'un entier standard sur la même machine.

En C , il est noté `int` long. Il doit être d'au moins 32 bits et peut être supérieur ou inférieur à un entier standard. Un programme conforme peut supposer qu'il peut stocker en toute sécurité des valeurs comprises entre

Tailles d'entiers longs courantes
langage de programmationType d'approbationPlateformesnom du type de donnéesStockage en octetsGamme signéePlage non signée
C ISO/ANSI C99norme internationaleUnix (systèmes 16/32 bits) ; Windows (systèmes 16/32/64 bits) long4 (exigence minimale C ISO/ANSI C99norme internationaleUnix (systèmes 64 bits) long8 (exigence minimale C++ ISO/ANSInorme internationaleUnix , Windows (système 16/32 bits)long4 (exigence minimale C++/CLINorme internationale ECMA-372Unix , Windows (systèmes 16/32 bits)long4 (exigence minimale VBNorme de l'entrepriseWindowsLong4 −(2 VBANorme de l'entrepriseWindows , Mac OS XLong4 −(2 Serveur SQLNorme de l'entrepriseWindowsBigInt8−(2 C# / VB.NETNorme internationale ECMAMicrosoft .NETlongouInt648−(2 JavaNorme internationale/d'entreprisePlateforme Javalong8−(2 PascalWindows , UNIXint648−(2 C99 et C++11 du langage C , un type `long long` est pris en charge, dont la capacité est le double de la capacité minimale de la norme . Ce type n'est pas compatible avec les compilateurs exigeant la conformité du code C à la norme C++03, car le type `long long` n'existait pas dans cette dernière. Pour un compilateur conforme aux normes ANSI/ISO, les exigences minimales pour les plages spécifiées, soit de bibliothèque standard C fournit `<stdint.h> `. Ceci a été introduit dans C99 et C++11.long longlongLes entiers littéraux peuvent être écrits sous forme de chiffres arabes , composés d'une séquence de chiffres, la négation étant indiquée par un signe moins . Cependant, la plupart des langages de programmation interdisent l'utilisation de virgules ou d'espaces pour séparer les chiffres . Exemples d'entiers littéraux :

  • 42
  • 10000
  • -233000

Il existe plusieurs méthodes alternatives pour écrire des littéraux entiers dans de nombreux langages de programmation :

  • De nombreux langages de programmation, notamment ceux influencés par le C , préfixent un entier littéral par `0` 0Xou ` 0`0x pour représenter une valeur hexadécimale , par exemple ` 0 0xDEADBEEF...Hh
  • Perl , Ruby , Java , Julia , D , Go , C# , Rust , Python (à partir de la version 3.6) et PHP (à partir de la version 7.4.0 ) autorisent l'insertion de tirets bas pour plus de clarté, par exemple ` ` , tandis que Fortran (10_000_000 à format fixe) ignore les espaces dans les littéraux entiers. C (à partir de C23 ) et C++ utilisent des guillemets simples à cet effet.
  • En C et C ++ , un zéro initial indique octale , par 0 0755...​​​0O0o
  • Plusieurs langages, dont Java , C# , Scala , Python , Ruby , OCaml , C (à partir de C23) et C++, peuvent représenter des valeurs binaires en préfixant un nombre avec 0Bou 0b.

Valeurs extrêmes

Dans de nombreux langages de programmation, il existe des constantes prédéfinies représentant les valeurs minimale et maximale représentables par un type entier donné.

Ces noms incluent

  • SmallBASIC : Java : , C : GLib : C++ : , , etc. Haskell : Pascal :Python 2 : Python 3 : Rouille : , , etc. Turing :

    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