Operator Bitwise dan Shift Java (Dengan Contoh)

Dalam tutorial ini, kita akan belajar tentang operator bitwise dan berbagai jenis operator shift di Java dengan bantuan contoh.

Di Java, operator bitwise melakukan operasi pada data integer pada level bit individu. Di sini, data integer meliputi byte, short, int, dan longjenis data.

Ada 7 operator untuk melakukan operasi bit-level di Java.

Operator Deskripsi
| Bitwise ATAU
& Bitwise DAN
^ Bitwise XOR
~ Pelengkap Bitwise
<< Shift Kiri
>> Shift Kanan Tertanda
>>> Shift Kanan Tidak Bertanda Tangan

1. Java Bitwise ATAU Operator

Operator bitwise OR |mengembalikan 1 jika setidaknya salah satu operan adalah 1. Jika tidak, ia mengembalikan 0.

Tabel kebenaran berikut menunjukkan cara kerja operator OR bitwise. Misalkan a dan b adalah dua operan yang hanya dapat mengambil nilai biner yaitu 1 atau 0.

Sebuah b a | b
0 0 0
0 1 1
1 0 1
1 1 1

Tabel di atas dikenal sebagai "Tabel Kebenaran" untuk operator OR bitwise.

Mari kita lihat operasi bitwise OR dari dua bilangan bulat 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 AND Operator

Operator bitwise AND &mengembalikan 1 jika dan hanya jika kedua operannya adalah 1. Jika tidak, ia mengembalikan 0.

Tabel berikut menunjukkan cara kerja operator DAN bitwise. Misalkan a dan b adalah dua operan yang hanya dapat mengambil nilai biner yaitu 1 dan 0.

Sebuah b a & b
0 0 0
0 1 0
1 0 0
1 1 1

Mari kita lihat operasi DAN bitwise dari dua bilangan bulat 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 AND

  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. Operator Java Bitwise XOR

Operator bitwise XOR ^mengembalikan 1 jika dan hanya jika salah satu operan adalah 1. Namun, jika kedua operan adalah 0 atau jika keduanya 1, maka hasilnya 0.

Tabel kebenaran berikut menunjukkan cara kerja operator XOR bitwise. Misalkan a dan b adalah dua operan yang hanya dapat mengambil nilai biner yaitu 1 atau 0.

Sebuah b a & b
0 0 0
0 1 1
1 0 1
1 1 0

Mari kita lihat operasi XOR bitwise dari dua bilangan bulat 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 Bitwise Java

Operator pelengkap bitwise adalah operator unary (bekerja hanya dengan satu operan). Ini dilambangkan dengan ~.

Ini mengubah digit biner 1 menjadi 0 dan 0 menjadi 1 .

Operator Pelengkap Bitwise Java

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 komplemen 2 dari 36 (yaitu -36 ) adalah 11011100 . Nilai ini setara dengan pelengkap bitwise dari 35 .

Oleh karena itu, kita dapat mengatakan bahwa pelengkap bitwise dari 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 Pergeseran Java

Ada tiga jenis operator shift di Jawa:

  • Shift Kiri yang Ditandatangani (<<)
  • Shift Kanan Bertanda Tangan (>>)
  • Shift Kanan Tidak Bertanda Tangan (>>>)

5. Operator Pergeseran Kiri Java

Operator shift kiri menggeser semua bit ke kiri dengan sejumlah bit tertentu. Ini dilambangkan dengan <<.

Operator Pergeseran Kiri 1 bit Java

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, kami melakukan pergeseran kanan 8 (yaitu tanda positif). Makanya, tidak ada sedikitpun 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 bertanda 1 untuk mengisi bit paling kiri.

Contoh 6: Operator Pergeseran Kanan Tertanda

 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 Pergeseran Kanan Tidak Bertanda Tangan Java

Java juga menyediakan shift kanan tanpa tanda tangan. Ini dilambangkan dengan >>>.

Di sini, posisi paling kiri yang kosong diisi dengan 0, bukan 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 Tanpa Tanda Tangan

 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 dapat kita lihat, operator shift kanan bertanda tangan dan tidak bertanda tangan mengembalikan hasil berbeda untuk bit negatif. Untuk mempelajari lebih lanjut, kunjungi Perbedaan antara >> dan >>>.

Artikel yang menarik...