Η Java διαθέτει τελεστές για τον χειρισμό των bit ενός ακέραιου τύπου (ενός byte, short, int, long ή char).
Χρησιμοποίησε τον << για ολίσθηση των bit προς τα αριστερά και τον >> για ολίσθηση προς τα δεξιά.
// Shift two places to the left
0b0000_1011 << 2;
// # => 0b0010_1100
// Shift two places to the right
0b0000_1011 >> 2;
// # => 0b0000_0010
Ο >> ονομάζεται επίσης τελεστής προσημασμένης ή αριθμητικής ολίσθησης, επειδή το bit που εισάγει είναι ίδιο με το bit προσήμου του.
Αυτό είναι το πιο αριστερό bit και είναι 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
Ο τελεστής bitwise AND (&) παίρνει δύο τιμές και εκτελεί μια πράξη AND σε κάθε bit.
Συγκρίνει κάθε bit της πρώτης τιμής με το bit στην ίδια θέση της δεύτερης τιμής.
Αν και τα δύο είναι 1, τότε το bit του αποτελέσματος είναι 1.
Διαφορετικά, το bit του αποτελέσματος είναι 0.
0b0110_0101 & 0b0011_1100;
// # => 0b0010_0100
Ο τελεστής bitwise OR (|) παίρνει δύο τιμές και εκτελεί μια πράξη OR σε κάθε bit.
Συγκρίνει κάθε bit της πρώτης τιμής με το bit στην ίδια θέση της δεύτερης τιμής.
Αν ένα από τα δύο bit είναι 1, το bit του αποτελέσματος είναι 1.
Διαφορετικά, είναι 0.
0b0110_0101 | 0b0011_1100;
// # => 0b0111_1101
Ο τελεστής bitwise XOR (^) εκτελεί μια πράξη XOR bit προς bit σε δύο τιμές.
Όπως οι τελεστές bitwise AND και bitwise OR, συγκρίνει κάθε bit της πρώτης τιμής με το bit στην ίδια θέση της δεύτερης τιμής.
Αν μόνο ένα από τα δύο είναι 1, το bit που προκύπτει είναι 1.
Διαφορετικά, είναι 0.
0b0110_0101 ^ 0b0011_1100;
// # => 0b0101_1001
~)Τέλος, ο τελεστής bitwise NOT (~) αντιστρέφει κάθε bit.
Σε αντίθεση με τους προηγούμενους τελεστές, αυτός είναι μονομελής τελεστής και δρα σε μία μόνο τιμή.
~0b0110_0101;
// # => 0b1001_1010