Type | Signification | Taille (en octets) | Plage de valeurs acceptées |
---|---|---|---|
char | Caractère Unicode | 2 | '\u0000' → '\uffff' (0 à 65535) |
byte | Entier très court | 1 | -128 → +127 |
short | Entier court | 2 | -32 768 → +32 767 |
int | Entier | 4 | -231≈-2,147×109 → +231-1≈2,147×109 |
long | Entier long | 8 | -263≈-9,223×1018 → +263-1≈9,223×1018 |
float | Nombre réel simple | 4 | ±2-149≈1.4×10-45 → ±2128-2104≈3.4×1038 |
double | Nombre réel double | 8 | ±2-1074≈4,9×10-324 → ±21024-2971≈1,8×10308 |
boolean | Valeur logique (booléen) | 1 | true (vrai), ou false (faux) |
Ce que l'on constate, c'est qu'il n'y a que des nombres non signé.
Si vous lisez un fichier binaire et que vous récupérer un octet (byte), naturellement, vous vous attendez à un nombre non signé.
Mais, voilà, Java ne vois pas les choses de la sorte.
Alors comment avoir la valeur d'un byte non signé ?
L'astuce est plutôt simple quoique déconcertante :
final DataInputStream file = ... int byte0 = file.readByte() & 0xff ;En appliquant un masque 0xff et en le mettant dans un int, on force Java à ne pas interpréter le contenu du byte.
Exemple, si le byte = -127, le signe disparait et la valeur voulue (255) est récupérée.
Aucun commentaire:
Enregistrer un commentaire