Les types primitifs de Java

Les types primitifs de Java

La mémoire centrale est un ensemble de « positions binaires » nommées bits. Les bits sont regroupés en octets (8 bits), et chaque octet est repéré par ce qu’on nomme son adresse.Compte tenu de sa technologie (actuelle !), l’ordinateur ne sait représenter et traiter que des informations exprimées sous forme binaire. Toute information, quelle que soit sa nature, devra être codée sous cette forme. Dans ces conditions, on voit qu’il ne suffit pas de connaître le contenu d’un emplacement de la mémoire (d’un ou de plusieurs octets) pour pouvoir lui attribuer une signification. Il faut également connaître la manière dont l’information qu’il contient a été codée. Il en va de même en général pour traiter cette information. Par exemple, pour additionner deux valeurs, il faudra savoir quel codage a été employé afin de pouvoir mettre en œuvre les bonnes instructions • la valeur absolue du nombre pour les positifs,• ce que l’on nomme le complément à deux du nombre, pour les négatifs.Examinons cela plus en détail, dans le cas de nombres représentés sur 16 bits (ce qui corres-. Pour ce faire, cette valeur est d’abord exprimée en base 2, puis tous les bits sont inversés (1 devient 0 et 0 devient 1) ; enfin, on ajoute une unité au résultat. Voici quelques exemples (avec la même présentation que précédemment) :2 Si l’on ajoute 1 au plus grand nombre positif (ici 0111111111111111, soit 7FFF en hexadécimal ou 32768 en décimal) et que l’on ne tient pas compte de la dernière retenue (ou, ce qui revient au même, si l’on ne considère que les 16 derniers bits du résultat), on obtient… le plus petit nombre négatif possible (ici 1111111111111111, soit FFFF en hexadécimal ou -32767 en décimal). C’est ce qui explique le phénomène de « modulo » bien connu de l’arithmétique entière, les dépassements de capacité n’étant jamais signa- lés, quel que soit le langage considéré.

Java dispose de quatre types entiers, correspondant chacun à des emplacements mémoire de taille différente, donc à des limitations différentes. Le tableau suivant en récapitule leurs caractéristiques. Notez l’existence de constantes prédéfinies de la formeMais on peut aussi utiliser une notation hexadécimale ou octale. Pour la notation hexadé- cimale, on utilise les 10 chiffres (0 à 9), ainsi que les 6 lettres a, b, c, d, e et f (en majuscules ou en minuscules) ; on fait précéder la valeur de 0x ou 0X. Par exemple :, suivant sa valeur. En principe, on peut penser que cet aspect a peu d’importance. Nous verrons cependant au 4 qu’il aura une légère incidence sur la validité de certaines expressions.Les types flottants permettent de représenter, de manière approchée, une partie des nombres réels. Pour ce faire, ils s’inspirent de la notation dite scientifique (ou exponentielle) bien con- nue qu’on trouve dans 1.5 10 (+1 ou -1) et deux quantités M (mantisse) et E (exposant) telles que la valeur: lors du codage d’un nombre décimal quelconque dans un type flottant, il est nécessaire de ne conserver qu’un nombre fini de bits. Or la plupart des nombres s’exprimant avec un nombre limité de décimales ne peuvent pas s’exprimer de façon exacte dans un tel codage. On est donc obligé de se limiter à une représentation approchée en faisant ce qu’on nomme une erreur de troncature.

Une estimation de l’erreur relative de troncature est fournie dans la colonne Précision sous la forme d’un nombre de chiffres significatifs. Il s’agit d’une approximation décimale plus par- lante que son équivalent (exact) en nombre de bits significatifs.. Ici encore, contrairement à ce qui se passe en Java, leur taille, donc a fortiori leurs caractéristiques dépendent de l’implémentation.Java impose l’utilisation des conventions IEEE 754 pour représenter les nombres flot- tants. Cela implique qu’il existe des motifs binaires particuliers permettant de représenter une valeur infinie (positive ou négative), ainsi qu’une valeur non représentable (comme le résultat de la division de 0 par 0). Nous y reviendrons au chapitre suivant. D’autre part, il existe deux représentations de zéro (0+ et 0-) mais ce point n’a aucune incidence sur les calculs ou sur les comparaisons ; en particulier, ces deux valeurs sont bien strictement égales à 0.f (float) ou 0. (double).En revanche, la constante 47 serait considérée comme entière et non comme flottante. En pra- tique, ce fait aura peu d’importance, compte tenu des conversions automatiques mises en place par le compilateur (et dont nous parlerons dans le chapitre suivant).La notation exponentielle utilise la lettre e (ou E) pour introduire un exposant entier (puis- sance de 10), avec ou sans signe. La mantisse peut être n’importe quel nombre décimal ou entier (le point peut être absent dès que l’on utilise un exposant).

 

Cours gratuitTélécharger le document complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *