# Java learning notes 2.3.5 operators and expression bit operators

Posted by Destramic on Thu, 03 Mar 2022 13:05:26 +0100

# Zero. Learning objectives of this lecture

1. Understand the meaning of bit operation
2. Master the use of bit operation

# 1, Bit operator concept

• Bit operators are symbols that operate on each bit of binary numbers. They operate specifically on numbers 0 and 1.

# 2, Bitwise operator usage

## (1) Classification description table

operatoroperationexampleresult
&Bitwise ANDa & bThe result of "and" operation for each bit of a and b
|Bitwise ORa | bThe result of "or" operation for each bit of a and b
~Reverse~ aThe result of "not" operation for each bit of a
^Bitwise XORa ^ bThe result of "XOR" operation for each bit of a and b
<<Shift lefta << bMove a to the left by b, and fill the space on the right with 0
>>Shift righta >> bMove a right to bit b, discard the moved out bit, and fill the highest bit on the left with 0 or 1
>>>unsigned right shift a >>> bMove a right to bit b, discard the moved out bit, and fill the highest bit on the left with 0
• Bitwise and operation truth table
&01
000
101
• By true or table value
|01
001
111
• Bitwise XOR truth table
^01
001
110
• Truth table of inverse operation
~01
10

## (2) Precautions

The essence of bit operators is to operate on binary numbers 0 and 1. When using bit operators, the operands will be converted into binary numbers for bit operation, and then the results will be converted into the desired binary numbers. Where 1 means true and 0 means false.

## (3) Case demonstration

### 1. Bitwise AND ### 2. Bitwise OR ### 3. Bit by bit inversion ### 4. Bitwise XOR ### 5. Shift left ### 6. Shift right ### 7. Unsigned right shift ### 8. Demonstrate various bit operations ```package net.hw.lesson05;

/**
* Function: demonstrate bit operation
* Author: Wei Hua
* Date: March 22, 2020
*/
public class Example509 {
public static void main(String[] args) {
int a = 0b00000110;
int b = 0b00001011;
// Bitwise AND
System.out.println(Integer.toBinaryString(a) + " & " + Integer.toBinaryString(b) + " = " + Integer.toBinaryString(a & b));
// Bitwise OR
System.out.println(Integer.toBinaryString(a) + " ! " + Integer.toBinaryString(b) + " = " + Integer.toBinaryString(a | b));
// Bit by bit inversion
System.out.println("~" + Integer.toBinaryString(a) + " = " + Integer.toBinaryString(~a));
// Bitwise XOR
System.out.println(Integer.toBinaryString(a) + " ^ " + Integer.toBinaryString(b) + " = " + Integer.toBinaryString(a ^ b));
// Shift left
System.out.println(Integer.toBinaryString(b) + " << 1 = " + Integer.toBinaryString(b << 1));
// Shift right
System.out.println(Integer.toBinaryString(b) + " >> 1 = " + Integer.toBinaryString(b >> 1));
// unsigned right shift
System.out.println(Integer.toBinaryString(b) + " >>> 1 = " + Integer.toBinaryString(b >>> 1));
}
}
```
• Run the program and view the results ### 9. Demonstrate the difference between shift right and unsigned right

How can we reflect the difference between right shift and unsigned right shift? ```package net.hw.lesson05;

/**
* Function: demonstrate the difference between right shift and unsigned right shift
* Author: Wei Hua
* Date: March 22, 2020
*/
public class Example510 {
public static void main(String[] args) {
int a = 0b00000111111111111111111111111001;  // Positive number
int b = 0b10000111111111111111111111111001;  // negative

// Shift right
System.out.println(Integer.toBinaryString(a) + " >> 1 = " + Integer.toBinaryString(a >> 1));
// unsigned right shift
System.out.println(Integer.toBinaryString(a) + " >>> 1 = " + Integer.toBinaryString(a >>> 1));
// Shift right
System.out.println(Integer.toBinaryString(b) + " >> 1 = " + Integer.toBinaryString(b >> 1));
// unsigned right shift
System.out.println(Integer.toBinaryString(b) + " >>> 1 = " + Integer.toBinaryString(b >>> 1));
}
}
```

Run the program and the results are as follows: The highest bit is the sign bit, 0 is a positive number and 1 is a negative number.
For positive numbers, a right shift results in the same way as an unsigned right shift.
For negative numbers, the result of shift right is different from that of unsigned right.

## (4) Classroom practice

• Program and calculate the following bit operation results
```1,23 & 34
2,23 | 34
3,23 ^ 34
4,~23
5,32 >> 2
6,-32 >> 2
7,32 >>> 2
8,-32 >>> 2
9,4 << 3
``` You can compare the bit operation of Python: As you can see, except that there is no unsigned right shift operator in Python, other bit operators are exactly the same as Java.

Topics: Java