I den här handledningen lär vi oss om bitvis operatör och olika typer av skiftoperatörer i Java med hjälp av exempel.
I Java utför bitvisa operatörer operationer på heltaldata på den enskilda bitnivån. Här innehåller heltal uppgifter byte
, short
, int
och long
typer av data.
Det finns 7 operatörer för att utföra bitnivååtgärder i Java.
Operatör | Beskrivning |
---|---|
| | Bitvis ELLER |
& | Bitvis OCH |
^ | Bitvis XOR |
~ | Bitvis komplement |
<< | Vänster Shift |
>> | Signerad högerförskjutning |
>>> | Osignerad högerförskjutning |
1. Java bitvis ELLER operatör
Den bitvisa ELLER- |
operatören returnerar 1 om minst en av operanderna är 1. Annars returnerar den 0.
Följande sanningstabell visar hur bitvis OR-operatören fungerar. Låt a och b vara två operander som bara kan ta binära värden, dvs. 1 eller 0.
a | b | a | b |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
Ovanstående tabell är känd som "Sanningstabellen" för bitvis ELLER-operatör.
Låt oss titta på bitvis ELLER-operation av två heltal 12 och 25.
12 = 00001100 (In Binary) 25 = 00011001 (In Binary) Bitwise OR Operation of 12 and 25 00001100 | 00011001 ____________ 00011101 = 29 (In Decimal)
Exempel 1: Bitvis ELLER
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 bitvis OCH operatör
Bitvis OCH- &
operatör returnerar 1 om och bara om båda operanderna är 1. Annars returnerar den 0.
Följande tabell visar hur bitvis AND-operatören fungerar. Låt a och b vara två operander som bara kan ta binära värden, dvs. 1 och 0.
a | b | a & b |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Låt oss titta på bitvis OCH-operation av två heltal 12 och 25.
12 = 00001100 (In Binary) 25 = 00011001 (In Binary) // Bitwise AND Operation of 12 and 25 00001100 & 00011001 ____________ 00001000 = 8 (In Decimal)
Exempel 2: Bitvis OCH
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. Java Bitwise XOR-operatör
Den bitvisa XOR- ^
operatören returnerar 1 om och endast om en av operanderna är 1. Om båda operanderna är 0 eller om båda är 1 är resultatet 0.
Följande sanningstabell visar hur den bitvisa XOR-operatören fungerar. Låt a och b vara två operander som bara kan ta binära värden, dvs. 1 eller 0.
a | b | a & b |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Låt oss titta på den bitvisa XOR-operationen av två heltal 12 och 25.
12 = 00001100 (In Binary) 25 = 00011001 (In Binary) // Bitwise XOR Operation of 12 and 25 00001100 00011001 ____________ 00010101 = 21 (In Decimal)
Exempel 4: Bitvis 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. Java Bitwise komplementoperatör
Bitvis komplementoperatören är en enhetlig operatör (fungerar med endast en operand). Det betecknas med ~
.
Det ändrar binära siffror 1 till 0 och 0 till 1 .
![](https://cdn.wiki-base.com/6894732/java_bitwise_and_shift_operators_with_examples.png.webp)
Det är viktigt att notera att det bitvisa komplementet för alla heltal N är lika med - (N + 1) . Till exempel,
Betrakta ett heltal 35 . Enligt regeln bör det bitvisa komplementet på 35 vara - (35 + 1) = -36 . Låt oss nu se om vi får rätt svar eller inte.
35 = 00100011 (In Binary) // using bitwise complement operator ~ 00100011 __________ 11011100
I exemplet ovan får vi att bitvis komplement av 00100011 ( 35 ) är 11011100 . Här, om vi konverterar resultatet till decimal får vi 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
Här kan vi se 2: s komplement på 36 (dvs. -36 ) är 11011100 . Detta värde motsvarar det bitvisa komplementet på 35 .
Därför kan vi säga att det bitvisa komplementet på 35 är - (35 + 1) = -36 .
Exempel 3: Bitvis komplement
class Main ( public static void main(String() args) ( int number = 35, result; // bitwise complement of 35 result = ~number; System.out.println(result); // prints -36 ) )
Java Shift-operatörer
Det finns tre typer av skiftoperatörer i Java:
- Signerad vänster skift (<<)
- Signerad högerförskjutning (>>)
- Osignerad högerförskjutning (>>>)
5. Java Left Shift-operatör
Den vänstra skiftoperatören skiftar alla bitar åt vänster med ett visst antal specificerade bitar. Det betecknas med <<
.
![](https://cdn.wiki-base.com/6894732/java_bitwise_and_shift_operators_with_examples_2.png.webp)
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)
Här utför vi rätt skift på 8 (dvs tecken är positivt). Därför finns det inget teckenbit. Så de bitar längst till vänster är fyllda med 0 (representerar positivt tecken).
// 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)
Här har vi använt den signerade biten 1 för att fylla bitarna längst till vänster.
Exempel 6: Signerad höger skiftoperatör
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. Java Onsigned Right Shift Operator
Java ger också en osignerad högerförskjutning. Det betecknas med >>>
.
Här fylls den lediga positionen längst till vänster med 0 istället för teckenbiten. Till exempel,
// unsigned right shift of 8 8 = 1000 8>>> 2 = 0010 // unsigned right shift of -8 -8 = 1000 (see calculation above) -8>>> 2 = 0010
Exempel 7: UnSigned Right Shift
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 ) )
Som vi kan se returnerar den undertecknade och osignerade högerskiftoperatören olika resultat för negativa bitar. För att lära dig mer, se Skillnaden mellan >> och >>>.