Operatori Java Bitwise și Shift (cu exemple)

În acest tutorial, vom afla despre operatorul bit și diferitele tipuri de operatori de schimbare în Java cu ajutorul exemplelor.

În Java, operatorii biți efectuează operațiuni pe date întregi la nivel de biți individual. Aici, datele întreg include byte, short, intși longtipuri de date.

Există 7 operatori care efectuează operațiuni la nivel de biți în Java.

Operator Descriere
| OR bit
& Bitwise ȘI
^ Bitwise XOR
~ Complement bitwise
<< Stânga Shift
>> Semnată tasta dreapta
>>> Shift dreapta nesemnat

1. Operator Java Bitwise SAU

|Operatorul OR bitwise returnează 1 dacă cel puțin unul dintre operanzi este 1. În caz contrar, returnează 0.

Următorul tabel de adevăr demonstrează funcționarea operatorului SAU în biți. Fie a și b doi operanzi care pot lua doar valori binare adică 1 sau 0.

A b a | b
0 0 0
0 1 1
1 0 1
1 1 1

Tabelul de mai sus este cunoscut sub numele de "Tabelul Adevărului" pentru operatorul OR în biți.

Să ne uităm la operația SAU în biți a două numere întregi 12 și 25.

 12 = 00001100 (In Binary) 25 = 00011001 (In Binary) Bitwise OR Operation of 12 and 25 00001100 | 00011001 ____________ 00011101 = 29 (In Decimal)

Exemplul 1: SAU bit

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

&Operatorul ȘI bit bit returnează 1 dacă și numai dacă ambii operanzi sunt 1. În caz contrar, returnează 0.

Tabelul următor demonstrează funcționarea operatorului ȘI bit. Fie a și b doi operanzi care pot lua doar valori binare adică 1 și 0.

A b a & b
0 0 0
0 1 0
1 0 0
1 1 1

Să aruncăm o privire la operațiunea bit și ȘI a două numere întregi 12 și 25.

 12 = 00001100 (In Binary) 25 = 00011001 (In Binary) // Bitwise AND Operation of 12 and 25 00001100 & 00011001 ____________ 00001000 = 8 (In Decimal)

Exemplul 2: ȘI bit

  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

^Operatorul XOR pe biți returnează 1 dacă și numai dacă unul dintre operanzi este 1. Cu toate acestea, dacă ambii operanzi sunt 0 sau dacă ambii sunt 1, atunci rezultatul este 0.

Următorul tabel de adevăr demonstrează funcționarea operatorului XOR în biți. Fie a și b doi operanzi care pot lua doar valori binare adică 1 sau 0.

A b a & b
0 0 0
0 1 1
1 0 1
1 1 0

Să ne uităm la operația XOR în biți a două numere întregi 12 și 25.

 12 = 00001100 (In Binary) 25 = 00011001 (In Binary) // Bitwise XOR Operation of 12 and 25 00001100 00011001 ____________ 00010101 = 21 (In Decimal)

Exemplul 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 Java Bitwise Complement

Operatorul de biți complement este un operator unar (funcționează cu un singur operand). Se notează cu ~.

Schimbă cifrele binare 1 la 0 și 0 la 1 .

Java Bitwise Complement Operator

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

Aici, putem vedea complementul 2 al lui 36 (adică -36 ) este 11011100 . Această valoare este echivalentă cu complementul bit de 35 .

Prin urmare, putem spune că complementul în biți al lui 35 este - (35 + 1) = -36 .

Exemplul 3: Complet 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 ) )

Operatori Java Shift

Există trei tipuri de operatori de schimbare în Java:

  • Shift stânga semnat (<<)
  • Shift dreapta semnat (>>)
  • Shift dreapta nesemnat (>>>)

5. Operator de schimbare stânga Java

Operatorul de schimbare stânga deplasează toți biții spre stânga cu un anumit număr de biți specificați. Se notează cu <<.

Java 1 bit Operator de schimbare stânga

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)

Aici, efectuăm schimbarea dreaptă de 8 (adică semnul este pozitiv). Prin urmare, nu există niciun semn. Deci, biții din stânga sunt umpluți cu 0 (reprezintă semnul pozitiv).

 // 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)

Aici, am folosit bitul semnat 1 pentru a umple biții din stânga.

Exemplul 6: Operator de schimbare dreapta semnat

 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 Java Shift Right Shift

Java oferă, de asemenea, o schimbare la dreapta nesemnată. Se notează cu >>>.

Aici, poziția din stânga vacantă este completată cu 0 în loc de bitul de semn. De exemplu,

 // unsigned right shift of 8 8 = 1000 8>>> 2 = 0010 // unsigned right shift of -8 -8 = 1000 (see calculation above) -8>>> 2 = 0010

Exemplul 7: Shift dreapta nesemnat

 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 ) )

După cum putem vedea, operatorul de deplasare la dreapta semnat și nesemnat returnează rezultate diferite pentru biții negativi. Pentru a afla mai multe, vizitați Diferența dintre >> și >>>.

Articole interesante...