Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Java et les nombres non signés

4 réponses
Avatar
Vincent Hiribarren
Bonjour,

je me retrouve devant une colle. Pas trop méchante, mais elle m'embête
un peu.

Imaginons les deux lignes suivantes :

byte a = (byte)255;
System.out.println(a);

La réponse est -1.
C'est normal : un byte va de -128 à 127.

Mais imaginons que je veuille en fait travailler sur des nombres non
signés. Par exemple, un byte est un élement d'une adresse IP (0 -> 255).
Un byte suffit si on travaille sur du non signé.
Donc j'aimerai que mon System.out.println(a) affiche 255.

Ce qui m'inquiète, c'est que je ne trouve aucun méthode pour faire ça.
Certes, le calcul est facile,

byte a = (byte)255;
System.out.println( (a<0) ? 256+a : a );

Mais il n'y a aucun moyen plus... direct et intuitif ?

Merci d'avance.

4 réponses

Avatar
Thibal
Vincent Hiribarren wrote:
Bonjour,

je me retrouve devant une colle. Pas trop méchante, mais elle m'embête
un peu.

Imaginons les deux lignes suivantes :

byte a = (byte)255;
System.out.println(a);

La réponse est -1.
C'est normal : un byte va de -128 à 127.

Mais imaginons que je veuille en fait travailler sur des nombres non
signés. Par exemple, un byte est un élement d'une adresse IP (0 -> 255).
Un byte suffit si on travaille sur du non signé.
Donc j'aimerai que mon System.out.println(a) affiche 255.

Ce qui m'inquiète, c'est que je ne trouve aucun méthode pour faire ça.
Certes, le calcul est facile,

byte a = (byte)255;
System.out.println( (a<0) ? 256+a : a );

Mais il n'y a aucun moyen plus... direct et intuitif ?

Merci d'avance.


Pourquoi faire simple quand on peut faire compliqué ? ;)

Avatar
no.bcausse.spam
Vincent Hiribarren wrote:

Bonjour,

je me retrouve devant une colle. Pas trop méchante, mais elle m'embête
un peu.

Imaginons les deux lignes suivantes :

byte a = (byte)255;
System.out.println(a);

La réponse est -1.
C'est normal : un byte va de -128 à 127.

Mais imaginons que je veuille en fait travailler sur des nombres non
signés.


ici il n'y a aucun probleme, la representation interne est bonne;

Par exemple, un byte est un élement d'une adresse IP (0 -> 255).
Un byte suffit si on travaille sur du non signé.
Donc j'aimerai que mon System.out.println(a) affiche 255.


l'affichage est le seul bleme, que tu as resolu comme un grand


Ce qui m'inquiète, c'est que je ne trouve aucun méthode pour faire ça.
Certes, le calcul est facile,

byte a = (byte)255;
System.out.println( (a<0) ? 256+a : a );

Mais il n'y a aucun moyen plus... direct et intuitif ?


le type primitif unsigned est le char (16 bits)


Merci d'avance.



--
bruno Causse
http://perso.wanadoo.fr/othello

Avatar
Bruno Jouhier
byte a = (byte)255;
System.out.println(a & 0xff);
Avatar
davis
J'ai trouvé beaucoup des problems avec les nombres non signés en
Java. En conséquence, j'ai écrit une classe au travail avec des
nombres non signés. Vous pouvez le trouver à
www.sqlmagic.com/resources.