Јава битовни и Схифт оператери (са примерима)

У овом упутству ћемо научити о битовном оператору и различитим типовима оператора померања у Јави уз помоћ примера.

У Јави, битни оператори изводе операције над целобројним подацима на појединачном нивоу бита. Овде, подаци број обухвата byte, short, intи longтипове података.

Постоји 7 оператора који изводе операције на нивоу бита у Јави.

Оператор Опис
| У битовима ИЛИ
& У битовима И.
^ Битно КСОР
~ Бит-ов комплемент
<< Лефт Схифт
>> Потписана десна смена
>>> Непотписана десна смена

1. Јава битни ИЛИ оператор

|Оператор у битовима ИЛИ враћа 1 ако је бар један од операнда 1. У супротном, враћа 0.

Следећа табела истинитости приказује рад битног ИЛИ оператора. Нека су а и б два операнда која могу узимати само бинарне вредности, тј. 1 или 0.

а б а | б
0 0 0
0 1 1
1 0 1
1 1 1

Горња табела је позната као „Табела истине“ за битни ИЛИ оператор.

Погледајмо битну ИЛИ операцију две целобројне 12 и 25.

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

Пример 1: Битно ИЛИ

 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. Јава битни и оператор

Битни &оператор АНД враћа 1 ако и само ако су оба операнда 1. У супротном, враћа 0.

Следећа табела приказује рад битног оператора АНД. Нека су а и б два операнда која могу узимати само бинарне вредности, тј. 1 и 0.

а б а & б
0 0 0
0 1 0
1 0 0
1 1 1

Погледајмо битни И рад две целобројне 12 и 25.

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

Пример 2: Битни И

  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. Јава Битвисе КСОР Оператор

Битни КСОР ^оператор враћа 1 ако и само ако је један од операнда 1. Међутим, ако су оба операнда 0 или ако су оба 1, онда је резултат 0.

Следећа табела истинитости приказује рад битног КСОР оператора. Нека су а и б два операнда која могу узимати само бинарне вредности, тј. 1 или 0.

а б а & б
0 0 0
0 1 1
1 0 1
1 1 0

Погледајмо битну КСОР операцију две целобројне 12 и 25.

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

Пример 4: Битни КСОР

 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. Оператер Јава битног комплемента

Оператор битног комплемента је унарни оператор (ради са само једним операндом). Означава се са ~.

Мења бинарне цифре 1 на 0 и 0 на 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

Овде можемо видети да је додатак двојке 36 (тј. -36 ) 11011100 . Ова вредност је еквивалентна битном комплементу од 35 .

Дакле, можемо рећи да је битовима комплемент 35 је - (35 + 1) = -36 .

Пример 3: Битни комплемент

 class Main ( public static void main(String() args) ( int number = 35, result; // bitwise complement of 35 result = ~number; System.out.println(result); // prints -36 ) )

Јава Схифт Оператори

У Јави постоје три врсте оператора смене:

  • Потписан лијеви помак (<<)
  • Потписана десна смена (>>)
  • Непотписани десни помак (>>>)

5. Јава Лефт Схифт Оператор

Леви оператер померања помера све битове према левој страни за одређени број назначених битова. Означава се са <<.

Јава 1-битни леви Схифт Оператор

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)

Овде вршимо десни помак од 8 (тј. Знак је позитиван). Дакле, нема знака. Дакле, крајњи леви битови су испуњени са 0 (представља позитиван знак).

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

Овде смо користили потписани бит 1 за попуњавање крајњих левих битова.

Пример 6: Потписани оператер десне смене

 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. Јава непотписани оператер десног помака

Јава такође пружа непотписани десни помак. Означава се са >>>.

Овде се упражњено крајње лево место попуњава 0 уместо знаковног бита. На пример,

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

Пример 7: Непотписани десни помак

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

Као што видимо, потписани и непотписани оператор десног помака враћа различите резултате за негативне битове. Да бисте сазнали више, посетите Разлику између >> и >>>.

Занимљиви Чланци...