Dalam tutorial ini, kita akan belajar mengenai operator bitwise dan pelbagai jenis operator shift di Java dengan bantuan contoh.
Di Java, pengendali bitwise melakukan operasi pada data integer pada tahap bit individu. Di sini, data integer termasuk byte
, short
, int
, dan long
jenis data.
Terdapat 7 pengendali untuk melakukan operasi tahap bit di Java.
Pengendali | Penerangan |
---|---|
| | Sedikit demi sedikit ATAU |
& | Sedikit demi sedikit DAN |
^ | Bitwise XOR |
~ | Pelengkap Bitwise |
<< | Anjakan Kiri |
>> | Pergeseran Kanan Ditandatangani |
>>> | Pergeseran Kanan Tidak Bertandatangan |
1. Java Bitwise ATAU Operator
Pengendali bitwise ATAU |
mengembalikan 1 jika sekurang-kurangnya salah satu operasi adalah 1. Jika tidak, ia mengembalikan 0.
Jadual kebenaran berikut menunjukkan cara kerja pengendali bitwise ATAU. Katakan a dan b menjadi dua operan yang hanya boleh mengambil nilai binari iaitu 1 atau 0.
a | b | a | b |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Jadual di atas dikenali sebagai "Truth Table" untuk pengendali bitwise ATAU.
Mari lihat operasi bitwise ATAU dua integer 12 dan 25.
12 = 00001100 (In Binary) 25 = 00011001 (In Binary) Bitwise OR Operation of 12 and 25 00001100 | 00011001 ____________ 00011101 = 29 (In Decimal)
Contoh 1: Bitwise ATAU
class Main ( public static void main(String() args) ( int number1 = 12, number2 = 25, result; // bitwise OR between 12 and 25 result = number1 | number2; System.out.println(result); // prints 29 ) )
2. Java Bitwise DAN Operator
Pengendali bitwise AND &
mengembalikan 1 jika dan hanya jika kedua-dua operasi itu 1. Jika tidak, ia mengembalikan 0.
Jadual berikut menunjukkan cara kerja operator bitwise AND. Katakan a dan b menjadi dua operan yang hanya boleh mengambil nilai binari iaitu 1 dan 0.
a | b | a & b |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Mari kita lihat operasi bitwise AND dua integer 12 dan 25.
12 = 00001100 (In Binary) 25 = 00011001 (In Binary) // Bitwise AND Operation of 12 and 25 00001100 & 00011001 ____________ 00001000 = 8 (In Decimal)
Contoh 2: Bitwise DAN
class Main ( public static void main(String() args) ( int number1 = 12, number2 = 25, result; // bitwise AND between 12 and 25 result = number1 & number2; System.out.println(result); // prints 8 ) )
3. Pengendali Java Bitwise XOR
^
Pengendali XOR bitwise mengembalikan 1 jika dan hanya jika salah satu operan adalah 1. Walau bagaimanapun, jika kedua-dua operan adalah 0 atau jika kedua-duanya adalah 1, maka hasilnya adalah 0.
Jadual kebenaran berikut menunjukkan cara pengendali XOR bitwise. Katakan a dan b menjadi dua operan yang hanya boleh mengambil nilai binari iaitu 1 atau 0.
a | b | a & b |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Mari kita lihat operasi XOR bitwise dua integer 12 dan 25.
12 = 00001100 (In Binary) 25 = 00011001 (In Binary) // Bitwise XOR Operation of 12 and 25 00001100 00011001 ____________ 00010101 = 21 (In Decimal)
Contoh 4: Bitwise XOR
class Main ( public static void main(String() args) ( int number1 = 12, number2 = 25, result; // bitwise XOR between 12 and 25 result = number1 number2; System.out.println(result); // prints 21 ) )
4. Operator Pelengkap Java Bitwise
Pengendali pelengkap bitwise adalah pengendali yang tidak berfungsi (hanya berfungsi dengan satu operasi). Ia dilambangkan oleh ~
.
Ia menukar digit binari 1 hingga 0 dan 0 hingga 1 .

It is important to note that the bitwise complement of any integer N is equal to - (N + 1). For example,
Consider an integer 35. As per the rule, the bitwise complement of 35 should be -(35 + 1) = -36. Now let's see if we get the correct answer or not.
35 = 00100011 (In Binary) // using bitwise complement operator ~ 00100011 __________ 11011100
In the above example, we get that the bitwise complement of 00100011 (35) is 11011100. Here, if we convert the result into decimal we get 220.
However, it is important to note that we cannot directly convert the result into decimal and get the desired output. This is because the binary result 11011100 is also equivalent to -36.
To understand this we first need to calculate the binary output of -36.
2's Complement
In binary arithmetic, we can calculate the binary negative of an integer using 2's complement.
1's complement changes 0 to 1 and 1 to 0. And, if we add 1 to the result of the 1's complement, we get the 2's complement of the original number. For example,
// compute the 2's complement of 36 36 = 00100100 (In Binary) 1's complement = 11011011 2's complement: 11011011 + 1 _________ 11011100
Di sini, kita dapat melihat pelengkap 2 dari 36 (iaitu -36 ) adalah 11011100 . Nilai ini bersamaan dengan pelengkap bitwise 35 .
Oleh itu, kita dapat mengatakan bahawa pelengkap bitwise 35 adalah - (35 + 1) = -36 .
Contoh 3: Pelengkap Bitwise
class Main ( public static void main(String() args) ( int number = 35, result; // bitwise complement of 35 result = ~number; System.out.println(result); // prints -36 ) )
Operator Shift Java
Terdapat tiga jenis operator shift di Jawa:
- Shift Kiri yang Ditandatangani (<<)
- Pergeseran Kanan yang Ditandatangani (>>)
- Pergeseran Kanan Tidak Bertandatangan (>>>)
5. Operator Left Shift Java
Pengendali peralihan kiri mengalihkan semua bit ke kiri dengan sebilangan bit yang ditentukan. Ia dilambangkan oleh <<
.

As we can see from the image above, we have a 4-digit number. When we perform a 1 bit left shift operation on it, each individual bit is shifted to the left by 1 bit.
As a result, the left-most bit (most-significant) is discarded and the right-most position(least-significant) remains vacant. This vacancy is filled with 0s.
Example 5: Left Shift Operators
class Main ( public static void main(String() args) ( int number = 2; // 2 bit left shift operation int result = number << 2; System.out.println(result); // prints 8 ) )
5. Java Signed Right Shift Operator
The signed right shift operator shifts all bits towards the right by a certain number of specified bits. It is denoted by >>
.
When we shift any number to the right, the least significant bits (rightmost) are discarded and the most significant position (leftmost) is filled with the sign bit. For example,
// right shift of 8 8 = 1000 (In Binary) // perform 2 bit right shift 8>> 2: 1000>> 2 = 0010 (equivalent to 2)
Di sini, kita melakukan pergeseran kanan 8 (iaitu tanda positif). Oleh itu, tidak ada sedikit pun tanda. Jadi bit paling kiri diisi dengan 0 (mewakili tanda positif).
// right shift of -8 8 = 1000 (In Binary) 1's complement = 0111 2's complement: 0111 + 1 _______ 1000 Signed bit = 1 // perform 2 bit right shift 8>> 2: 1000>> 2 = 1110 (equivalent to -2)
Di sini, kami telah menggunakan bit 1 yang ditandatangani untuk mengisi bit paling kiri.
Contoh 6: Operator Shift Kanan yang Ditandatangani
class Main ( public static void main(String() args) ( int number1 = 8; int number2 = -8; // 2 bit signed right shift System.out.println(number1>> 2); // prints 2 System.out.println(number2>> 2); // prints -2 ) )
7. Operator Shift Kanan Java yang Tidak Ditandatangani
Java juga memberikan pergeseran kanan yang tidak ditandatangani. Ia dilambangkan oleh >>>
.
Di sini, kedudukan paling kiri kosong diisi dengan 0 dan bukannya bit tanda. Sebagai contoh,
// unsigned right shift of 8 8 = 1000 8>>> 2 = 0010 // unsigned right shift of -8 -8 = 1000 (see calculation above) -8>>> 2 = 0010
Contoh 7: Pergeseran Kanan Tidak Ditandatangani
class Main ( public static void main(String() args) ( int number1 = 8; int number2 = -8; // 2 bit signed right shift System.out.println(number1>>> 2); // prints 2 System.out.println(number2>>> 2); // prints 1073741822 ) )
Seperti yang kita lihat, operator shift kanan yang ditandatangani dan tidak ditandatangani memberikan hasil yang berbeza untuk bit negatif. Untuk mengetahui lebih lanjut kunjungi Perbezaan antara >> dan >>>.