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 होता है।
<< से बाईं ओर खिसकाने पर दाईं ओर हमेशा 0 जुड़ते हैं।
// 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
जब दाईं ओर खिसकाते समय 0 जोड़ने हों, तो इसके बजाय >>> का उपयोग कीजिए।
खिसकाते समय 0 जोड़ने को लॉजिकल शिफ्ट भी कहा जाता है।
// Shift two places to the right, inserting 0s on the left
value >>> 2;
// # => 0010_0000_0000_0000_0000_0000_0000_1001
बिटवाइज़ AND (&) ऑपरेटर दो वैल्यू लेता है और हर बिट पर AND करता है।
यह पहली वैल्यू के हर बिट की तुलना दूसरी वैल्यू की उसी जगह वाले बिट से करता है।
अगर दोनों 1 हैं, तो परिणाम का बिट 1 होता है।
वरना परिणाम का बिट 0 होता है।
0b0110_0101 & 0b0011_1100;
// # => 0b0010_0100
बिटवाइज़ OR (|) ऑपरेटर दो वैल्यू लेता है और हर बिट पर OR करता है।
यह पहली वैल्यू के हर बिट की तुलना दूसरी वैल्यू की उसी जगह वाले बिट से करता है।
अगर इनमें से कोई भी बिट 1 है, तो परिणाम का बिट 1 होता है।
वरना वह 0 होता है।
0b0110_0101 | 0b0011_1100;
// # => 0b0111_1101
बिटवाइज़ XOR ऑपरेटर (^) दो वैल्यू पर बिटवाइज़ XOR करता है।
बिटवाइज़ AND और बिटवाइज़ OR ऑपरेटर की तरह यह भी पहली वैल्यू के हर बिट की तुलना दूसरी वैल्यू की उसी जगह वाले बिट से करता है।
अगर इनमें से सिर्फ एक 1 है, तो परिणाम का बिट 1 होता है।
वरना वह 0 होता है।
0b0110_0101 ^ 0b0011_1100;
// # => 0b0101_1001
~)अंत में, बिटवाइज़ NOT ऑपरेटर (~) हर बिट को पलट देता है।
पिछले ऑपरेटरों की तरह नहीं, यह एक यूनरी ऑपरेटर है, जो सिर्फ एक ही वैल्यू पर काम करता है।
~0b0110_0101;
// # => 0b1001_1010