De http://www.coderanch.com/t/236675/java-programmer-SCJP/certification/xff
Le littéral hexadécimal 0xFF est un entier égal (255). Java représente int comme 32 bits. Cela ressemble à ceci en binaire:
00000000 00000000 00000000 11111111
Quand vous faites un peu sage ET avec cette valeur (255) sur n'importe quel nombre, cela va masquer (faire des ZERO) tous sauf les 8 bits les plus bas du nombre (seront tels quels).
... 01100100 00000101 & ...00000000 11111111 = 00000000 00000101
& est quelque chose comme% mais pas vraiment .
Et pourquoi 0xff? ceci dans ((puissance de 2) - 1). Tout ((puissance de 2) - 1) (par exemple 7, 255 ...) se comportera quelque chose comme l'opérateur%.
Alors
en binaire, 0 est, tous les zéros, et 255 ressemble à ceci:
00000000 00000000 00000000 11111111
Et -1 ressemble à ceci
11111111 11111111 11111111 11111111
Lorsque vous effectuez un ET au niveau du bit de 0xFF et toute valeur comprise entre 0 et 255, le résultat est exactement le même que la valeur. Et si une valeur supérieure à 255 reste, le résultat sera compris entre 0 et 255.
Cependant, si vous faites:
-1 & 0xFF
vous obtenez
00000000 00000000 00000000 11111111
, qui ne correspond PAS à la valeur d'origine de -1 ( 11111111
soit 255 en décimal).
Quelques manipulations de bits supplémentaires: (sans rapport avec la question)
X >> 1 = X/2
X << 1 = 2X
Vérifiez qu'un bit particulier est défini (1) ou non (0) puis
int thirdBitTobeChecked = 1 << 2 (...0000100)
int onWhichThisHasTobeTested = 5 (.......101)
int isBitSet = onWhichThisHasTobeTested & thirdBitTobeChecked;
if(isBitSet > 0) {
//Third Bit is set to 1
}
Définir (1) un bit particulier
int thirdBitTobeSet = 1 << 2 (...0000100)
int onWhichThisHasTobeSet = 2 (.......010)
onWhichThisHasTobeSet |= thirdBitTobeSet;
ReSet (0) un bit particulier
int thirdBitTobeReSet = ~(1 << 2) ; //(...1111011)
int onWhichThisHasTobeReSet = 6 ;//(.....000110)
onWhichThisHasTobeReSet &= thirdBitTobeReSet;
XOR
Notez simplement que si vous effectuez l'opération XOR deux fois, la même valeur sera obtenue.
byte toBeEncrypted = 0010 0110
byte salt = 0100 1011
byte encryptedVal = toBeEncrypted ^ salt == 0110 1101
byte decryptedVal = encryptedVal ^ salt == 0010 0110 == toBeEncrypted :)
Une autre logique avec XOR est
if A (XOR) B == C (salt)
then C (XOR) B == A
C (XOR) A == B
Ce qui précède est utile pour permuter deux variables sans température comme ci-dessous
a = a ^ b; b = a ^ b; a = a ^ b;
OU
a ^= b ^= a ^= b;