Bitwise Operators in Java
Bitwise operators in Java operate on individual bits of integer values. These operators are useful for low-level programming, optimizations, and working with binary numbers.
1. List of Bitwise Operators
| Operator | Name | Description | Example (5 & 3) |
|---|---|---|---|
& | Bitwise AND | Sets bits to 1 if both bits are 1 | 5 & 3 → 1 (0101 & 0011 → 0001) |
| | | Bitwise OR | Sets bits to 1 if at least one bit is 1 | |
^ | Bitwise XOR (Exclusive OR) | Sets bits to 1 if bits are different | 5 ^ 3 → 6 (0101 ^ 0011 → 0110) |
~ | Bitwise NOT (Complement) | Inverts all bits (1 → 0, 0 → 1) | ~5 → -6 (flips 0101 to 1010, two’s complement) |
<< | Left Shift | Shifts bits left, multiplying by 2^n | 5 << 1 → 10 (0101 → 1010) |
>> | Right Shift | Shifts bits right, dividing by 2^n (sign preserved) | 5 >> 1 → 2 (0101 → 0010) |
>>> | Unsigned Right Shift | Shifts bits right, filling zeros (0) | -5 >>> 1 → large positive number |
2. Bitwise AND (&)
- Performs AND operation on each bit.
- The result is
1only if both bits are1.
Example
public class BitwiseAndExample {
public static void main(String[] args) {
int a = 5; // 0101
int b = 3; // 0011
System.out.println("a & b: " + (a & b)); // 0001 → 1
}
}
✔ 5 & 3 compares each bit:
0101 (5)
& 0011 (3)
--------
0001 (1)
3. Bitwise OR (|)
- Performs OR operation on each bit.
- The result is
1if at least one bit is1.
Example
public class BitwiseOrExample {
public static void main(String[] args) {
int a = 5; // 0101
int b = 3; // 0011
System.out.println("a | b: " + (a | b)); // 0111 → 7
}
}
✔ 5 | 3 compares each bit:
0101 (5)
| 0011 (3)
--------
0111 (7)
4. Bitwise XOR (^)
- Returns
1only if bits are different.
Example
public class BitwiseXorExample {
public static void main(String[] args) {
int a = 5; // 0101
int b = 3; // 0011
System.out.println("a ^ b: " + (a ^ b)); // 0110 → 6
}
}
✔ 5 ^ 3 compares each bit:
0105 (5)
^ 0011 (3)
--------
0110 (6)
5. Bitwise NOT (~) (Complement)
- Flips all bits (
1 → 0,0 → 1). - Uses two’s complement to represent negative numbers.
Example
public class BitwiseNotExample {
public static void main(String[] args) {
int a = 5; // 0101
System.out.println("~a: " + (~a)); // 1010 → -6
}
}
✔ ~5 flips bits and converts to negative:
0000 0000 0000 0000 0000 0000 0000 0101 (5)
~ ----------------------------------------
1111 1111 1111 1111 1111 1111 1111 1010 (-6 in two's complement)
Why -6?
- Java uses two’s complement representation for negative numbers.
6. Left Shift (<<)
- Shifts bits left, filling with
0s. - Multiplies the number by
2^n.
Example
public class LeftShiftExample {
public static void main(String[] args) {
int a = 5; // 0101
System.out.println("a << 1: " + (a << 1)); // 1010 → 10
}
}
✔ 5 << 1 shifts left:
0000 0101 (5)
<< 1
0000 1010 (10)
Formula:a << n → a * 2^n
7. Right Shift (>>)
- Shifts bits right, keeping the sign bit.
- Divides the number by
2^n.
Example
public class RightShiftExample {
public static void main(String[] args) {
int a = 5; // 0101
System.out.println("a >> 1: " + (a >> 1)); // 0010 → 2
}
}
✔ 5 >> 1 shifts right:
0000 0101 (5)
>> 1
0000 0010 (2)
Formula: a >> n → a / 2^n
8. Unsigned Right Shift (>>>)
- Shifts bits right, filling zeros (
0). - Works differently for negative numbers.
Example
public class UnsignedRightShiftExample {
public static void main(String[] args) {
int a = -5;
System.out.println("a >>> 1: " + (a >>> 1));
}
}
✔ -5 >>> 1 shifts right, filling with zeros:
1111 1111 1111 1111 1111 1111 1111 1011 (-5 in binary)
>>> 1
0111 1111 1111 1111 1111 1111 1111 1101 (large positive number)
9. Bitwise Operators vs. Logical Operators
| Operator | Type | Behavior |
|---|---|---|
& | Bitwise AND | Compares each bit (1 & 1 → 1) |
&& | Logical AND | Evaluates Boolean expressions (true && false → false) |
| ` | ` | Bitwise OR |
| ` | ` |
✔ Bitwise operators work on binary numbers.
✔ Logical operators work on Boolean values (true/false).
10. Final Thoughts
| Operator | Operation | Effect |
|---|---|---|
& | Bitwise AND | 1 & 1 → 1, 0 & 1 → 0 |
| | | Bitwise OR | |
^ | Bitwise XOR | 1 ^ 0 → 1, 1 ^ 1 → 0 |
~ | Bitwise NOT | Inverts bits (~5 → -6) |
<< | Left Shift | Multiplies by 2^n |
>> | Right Shift | Divides by 2^n (keeps sign) |
>>> | Unsigned Right Shift | Divides by 2^n (fills with 0) |