Dari http://www.coderanch.com/t/236675/java-programmer-SCJP/certification/xff
Hex literal 0xFF adalah int yang sama (255). Java mewakili int sebagai 32 bit. Ini terlihat seperti ini dalam biner:
00000000 00000000 00000000 11111111
Ketika Anda melakukan sedikit bijaksana AND dengan nilai ini (255) pada nomor apapun, itu akan menutupi (membuat NOL) semua kecuali 8 bit terendah dari nomor tersebut (akan seperti apa adanya).
... 01100100 00000101 & ...00000000 11111111 = 00000000 00000101
& adalah sesuatu seperti% tapi tidak juga .
Dan mengapa 0xff? ini di ((kekuatan 2) - 1). Semua ((pangkat 2) - 1) (mis. 7, 255 ...) akan berperilaku seperti operator%.
Kemudian
Dalam biner, 0 adalah, semua nol, dan 255 terlihat seperti ini:
00000000 00000000 00000000 11111111
Dan -1 terlihat seperti ini
11111111 11111111 11111111 11111111
Saat Anda melakukan bitwise AND dari 0xFF dan nilai apa pun dari 0 hingga 255, hasilnya sama persis dengan nilainya. Dan jika ada nilai yang lebih tinggi dari 255 tetap hasilnya akan berada dalam 0-255.
Namun, jika Anda melakukannya:
-1 & 0xFF
Anda mendapatkan
00000000 00000000 00000000 11111111
, yang TIDAK sama dengan nilai asli -1 ( 11111111
adalah 255 dalam desimal).
Manipulasi bit lagi: (Tidak terkait dengan pertanyaan)
X >> 1 = X/2
X << 1 = 2X
Periksa apakah bit tertentu disetel (1) atau tidak (0) lalu
int thirdBitTobeChecked = 1 << 2 (...0000100)
int onWhichThisHasTobeTested = 5 (.......101)
int isBitSet = onWhichThisHasTobeTested & thirdBitTobeChecked;
if(isBitSet > 0) {
//Third Bit is set to 1
}
Atur (1) bit tertentu
int thirdBitTobeSet = 1 << 2 (...0000100)
int onWhichThisHasTobeSet = 2 (.......010)
onWhichThisHasTobeSet |= thirdBitTobeSet;
Setel ulang (0) bit tertentu
int thirdBitTobeReSet = ~(1 << 2) ; //(...1111011)
int onWhichThisHasTobeReSet = 6 ;//(.....000110)
onWhichThisHasTobeReSet &= thirdBitTobeReSet;
XOR
Perhatikan saja bahwa jika Anda melakukan operasi XOR dua kali, akan menghasilkan nilai yang sama.
byte toBeEncrypted = 0010 0110
byte salt = 0100 1011
byte encryptedVal = toBeEncrypted ^ salt == 0110 1101
byte decryptedVal = encryptedVal ^ salt == 0010 0110 == toBeEncrypted :)
Satu lagi logika dengan XOR adalah
if A (XOR) B == C (salt)
then C (XOR) B == A
C (XOR) A == B
Di atas berguna untuk menukar dua variabel tanpa suhu seperti di bawah ini
a = a ^ b; b = a ^ b; a = a ^ b;
ATAU
a ^= b ^= a ^= b;