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>
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!