Von http://www.coderanch.com/t/236675/java-programmer-SCJP/certification/xff
Das Hex-Literal 0xFF ist gleich int (255). Java repräsentiert int als 32 Bit. In Binärform sieht es so aus:
00000000 00000000 00000000 11111111
Wenn Sie ein bisschen weise UND mit diesem Wert (255) für eine beliebige Zahl ausführen, werden alle bis auf die niedrigsten 8 Bits der Zahl maskiert (NULL gemacht) (wie sie sind).
... 01100100 00000101 & ...00000000 11111111 = 00000000 00000101
& ist so etwas wie%, aber nicht wirklich .
Und warum 0xff? dies in ((Potenz von 2) - 1). Alle ((Potenz von 2) - 1) (z. B. 7, 255 ...) verhalten sich so etwas wie% Operator.
Dann ist
in binär 0 alle Nullen und 255 sieht folgendermaßen aus:
00000000 00000000 00000000 11111111
Und -1 sieht so aus
11111111 11111111 11111111 11111111
Wenn Sie ein bitweises UND von 0xFF und einen Wert von 0 bis 255 ausführen, entspricht das Ergebnis genau dem Wert. Und wenn ein Wert höher als 255 ist, liegt das Ergebnis immer noch zwischen 0 und 255.
Wenn Sie jedoch Folgendes tun:
-1 & 0xFF
du erhältst
00000000 00000000 00000000 11111111
, was NICHT dem ursprünglichen Wert von -1 entspricht ( 11111111
ist 255 in Dezimalzahl).
Noch ein paar Bitmanipulationen: (Nicht im Zusammenhang mit der Frage)
X >> 1 = X/2
X << 1 = 2X
Überprüfen Sie, ob ein bestimmtes Bit gesetzt ist (1) oder nicht (0)
int thirdBitTobeChecked = 1 << 2 (...0000100)
int onWhichThisHasTobeTested = 5 (.......101)
int isBitSet = onWhichThisHasTobeTested & thirdBitTobeChecked;
if(isBitSet > 0) {
//Third Bit is set to 1
}
Setze (1) ein bestimmtes Bit
int thirdBitTobeSet = 1 << 2 (...0000100)
int onWhichThisHasTobeSet = 2 (.......010)
onWhichThisHasTobeSet |= thirdBitTobeSet;
Setzen Sie ein bestimmtes Bit zurück (0)
int thirdBitTobeReSet = ~(1 << 2) ; //(...1111011)
int onWhichThisHasTobeReSet = 6 ;//(.....000110)
onWhichThisHasTobeReSet &= thirdBitTobeReSet;
XOR
Beachten Sie nur, dass bei zweimaliger XOR-Operation derselbe Wert angezeigt wird.
byte toBeEncrypted = 0010 0110
byte salt = 0100 1011
byte encryptedVal = toBeEncrypted ^ salt == 0110 1101
byte decryptedVal = encryptedVal ^ salt == 0010 0110 == toBeEncrypted :)
Eine weitere Logik mit XOR ist
if A (XOR) B == C (salt)
then C (XOR) B == A
C (XOR) A == B
Das Obige ist nützlich, um zwei Variablen ohne Temperatur wie unten zu tauschen
a = a ^ b; b = a ^ b; a = a ^ b;
ODER
a ^= b ^= a ^= b;