تحتوي Java على عوامل للتعامل مع بتات نوع صحيح (وهو byte أو short أو int أو long أو char).
استخدم << لإزاحة البتات إلى اليسار، و>> لإزاحتها إلى اليمين.
// Shift two places to the left
0b0000_1011 << 2;
// # => 0b0010_1100
// Shift two places to the right
0b0000_1011 >> 2;
// # => 0b0000_0010
يُسمى >> أيضًا عامل الإزاحة الموقّعة أو الإزاحة الحسابية، لأن البت الذي تُدخله هو نفسه بت الإشارة.
وهذا البت هو الواقع في أقصى اليسار، ويكون 0 إذا كانت القيمة موجبة و1 إذا كانت سالبة.
أما الإزاحة إلى اليسار باستخدام << فتُدخل دائمًا أصفارًا من جهة اليمين.
// Shift 2 places to the right preserves the sign
// The binary value is two's complement of 0b0000_0110 (or 0x00000026), so the binary representation will be
// 1000_0000_0000_0000_0000_0000_0010_0110
int value = -0x7FFFFFDA;
// Shift two places to the right, preserving the sign bit
value >> 2;
// # => 1110_0000_0000_0000_0000_0000_0000_1001
استخدم >>> بدلًا من ذلك عندما يُراد إدخال أصفار عند الإزاحة إلى اليمين.
ويُعرف إدخال الأصفار أثناء الإزاحة أيضًا باسم الإزاحة المنطقية.
// Shift two places to the right, inserting 0s on the left
value >>> 2;
// # => 0010_0000_0000_0000_0000_0000_0000_1001
AND على مستوى البتاتيأخذ العامل AND على مستوى البتات (&) قيمتين وينفّذ عملية AND على كل بت.
فهو يقارن كل بت من القيمة الأولى بالبت الواقع في الموضع نفسه من القيمة الثانية.
وإذا كان كلاهما 1، كان بت النتيجة 1.
وإلا كان بت النتيجة 0.
0b0110_0101 & 0b0011_1100;
// # => 0b0010_0100
OR على مستوى البتاتيأخذ العامل OR على مستوى البتات (|) قيمتين وينفّذ عملية OR على كل بت.
فهو يقارن كل بت من القيمة الأولى بالبت الواقع في الموضع نفسه من القيمة الثانية.
وإذا كان أي من البتين 1، كان بت النتيجة 1.
وإلا كان 0.
0b0110_0101 | 0b0011_1100;
// # => 0b0111_1101
XOR على مستوى البتاتينفّذ العامل XOR على مستوى البتات (^) عملية XOR على قيمتين.
ومثل العاملين AND وOR على مستوى البتات، يقارن كل بت من القيمة الأولى بالبت الواقع في الموضع نفسه من القيمة الثانية.
وإذا كان واحد منهما فقط هو 1، كان بت النتيجة 1.
وإلا كان 0.
0b0110_0101 ^ 0b0011_1100;
// # => 0b0101_1001
NOT على مستوى البتات (~)وأخيرًا، يعكس العامل NOT على مستوى البتات (~) كل بت.
وخلافًا للعوامل السابقة، فإنه عامل أحادي، يعمل على قيمة واحدة فقط.
~0b0110_0101;
// # => 0b1001_1010