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