Maison  >  Article  >  Java  >  Pourquoi « value & 0xff » produit-il une valeur non signée en Java, même si « value » est un octet signé ?

Pourquoi « value & 0xff » produit-il une valeur non signée en Java, même si « value » est un octet signé ?

DDD
DDDoriginal
2024-11-02 02:45:02528parcourir

Why does `value & 0xff` produce an unsigned value in Java, even though `value` is a signed byte?

Manipulation au niveau du bit avec Value & 0xff en Java

Dans cet extrait de code Java :

<code class="java">byte value = 0xfe; // corresponds to -2 (signed) and 254 (unsigned)
int result = value & 0xff;</code>

la question se pose : pourquoi l'opération AND au niveau du bit (&) entre value et 0xff produit-elle le résultat 254 (non signé) au lieu de -2 (signé) comme prévu ?

Contrairement au C, l'octet est un type signé en Java. L'attribution d'une valeur à int sans manipulation au niveau du bit entraînerait la valeur signée -2. Cependant, l'utilisation de & avec 0xff permet d'obtenir la valeur non signée prévue.

La clé ici est que & fonctionne sur les valeurs int. Lorsque la valeur (un octet) est utilisée avec &, elle est d'abord promue en entier. De même, 0xff est un littéral int. L'opération & donne ensuite la valeur binaire de 8 bits à partir de la valeur placée dans les 8 bits les moins significatifs du résultat.

Dans cet exemple :

  • la valeur est promue à -2 (11111110 en binaire)
  • 0xff représente 255 (11111111 en binaire)
  • value & 0xff donne donc 254 (11111110 en binaire)

Cette manipulation au niveau du bit est couramment utilisée pour extraire des bits spécifiques ou conserver la nature non signée d'une valeur, en particulier dans des scénarios de programmation de bas niveau ou de manipulation de données.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn