Salut à tous,
J’ai un truc qui me perturbe énormément.
je fais un projet d’école et on dois lire un fichier, jusque là pas de souci, mais le problème c’est qu’on doit récupérer des bytes dans ce fichier.
Le créateur du fichier l’a rempli en se disant que c’était des unsigned bytes donc des valeurs de [0;255]
, mais en java, les bytes sont signés donc avec une range de [-128;127]
lorsque je lis 255
i.e. 11111111
java pense que c’est écrit -1
. Comme ce n’est pas le sujet du TP, la prof nous a donné une méthode pour garder la signification de valeur et modifier ce byte contenant 11111111
pour qu’on puisse comparer les bytes du fichier entre eux.
Sa méthode est ((byte & 0xFF) -128)
mon -1 devient un 127, la plus grande valeur dans la range signed byte tout comme le 255 d’origine était la plus grande valeur dans sa range.
Ca joue mais je comprend pas ce qui se passe, le & 0xFF est le AND
logique donc ça conserve les 8 premiers bits et ça enlève -128 i.e. 10000000 normallement le bit de signe change et j’ai 127, i.e. 01111111
Mais je vois pas vraiment à quoi sert le 0xFF s’il conserve les 8 premiers bits et qu’il y en a pas d’autre ( un byte = 8 bits) il ne fait aucun travail non ? Pourquoi pas simplement faire byte -128 ?
J’ai fais quelques testes et il me semble que la même manipulation refait la même chose en sens inverse quelqu’un pourrait confirmer ?