Maison > Java > javaDidacticiel > Pourquoi l'extrait de code \'byte value = 0xfe; int result = value & 0xff;\' donne-t-il une valeur de 254 ?

Pourquoi l'extrait de code \'byte value = 0xfe; int result = value & 0xff;\' donne-t-il une valeur de 254 ?

Linda Hamilton
Libérer: 2024-11-03 12:30:28
original
870 Les gens l'ont consulté

Why does the code snippet

Comprendre les opérations au niveau du bit : démêler la valeur & 0xff en Java

La question découle d'un extrait de code Java qui effectue une opération au niveau du bit à l'aide du & opérateur :

<code class="java">byte value = 0xfe;
int result = value & 0xff;</code>
Copier après la connexion

Cette opération semble donner une valeur de 254 une fois imprimée. Cependant, comprendre comment cela fonctionne nécessite d'approfondir les subtilités des types de données et des opérations au niveau du bit en Java.

Opérations au niveau du bit et promotion des données

L'opérateur & en Java effectue une opération ET au niveau du bit, où chaque bit du résultat est défini sur 1 si les deux bits correspondants dans les opérandes sont 1, et 0 sinon. Normalement, cette opération aboutit à une valeur du même type que ses opérandes.

Dans l'extrait de code, la valeur est un octet, qui est un entier signé de 8 bits. La valeur 0xfe correspond à -2 en représentation signée et 254 en représentation non signée. L'autre opérande, 0xff, est un littéral int représentant un 255 non signé.

Cependant, l'opérateur & est défini pour fonctionner uniquement sur les valeurs int. Par conséquent, la valeur est d'abord promue en int (ff ff ff fe) avant que l'opération ne soit effectuée.

Dévoilement du résultat

L'opération & est ensuite appliquée entre le valeur promue et le littéral int 0xff (00 00 00 ff), ce qui donne la valeur 00 00 00 fe. Cela correspond à 254 en représentation non signée, qui est imprimé comme résultat.

En résumé, l'expression value & 0xff définit le résultat sur la valeur non signée résultant de la mise des 8 bits de valeur dans les 8 bits les plus bas du résultat . Ceci est nécessaire car byte est un type signé en Java, et la conversion directe de byte en int entraînerait une représentation signée incorrecte.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal