This tutorial will take you step by step through the process of understanding and using operators that act on individual bits. The best way to learn is to compile and run these programs yourself (copy, paste, compile and run !). Comments such as /* this is a comment */ or // this is another comment are inserted to explain what does the line of code do. The programs are kept simple for the purpose of concentrating on the main idea in question.
The bitwise logical operators are : ~ , | , & , ^
~ the NOT operator
| the OR operator
& the AND operator
^ the XOR operator
These opearators act on each individual bit within each opearand according to this table
A B A|B A&B A^B ~A
0 0 0 0 0 1
1 0 1 0 1 0
0 1 1 0 1 1
1 1 1 1 0 0
Example 1: (~) the NOT opearator
This example shows the effect of using the ~ opearator.
class Bits1{
public static void main(String args[]){
System.out.println(" ~ NOT opeartor");
// invert 0
System.out.println("~ 0 = "+~0);
// invert 11
System.out.println("~ 11 = "+~11);
}
}
Explanations of ~0 = -1.
0 in binary is: 00000000000000000000000000000000
invert all the bits: 11111111111111111111111111111111
This is a negative number since its bit on the left is 1. To find its value we use the two's complement method.
invert all bits and add 1 and this gives
00000000000000000000000000000001, this is the binary form of 1. so 11111111111111111111111111111111 is the binary form of -1
Explanation of ~11 = -12
11 in binary is: 00000000000000000000000000001011
invert all bits: 11111111111111111111111111110100, this is a negative number and we use the two's complement method to fint its value.
invert all bits
00000000000000000000000000001011
add 1: 00000000000000000000000000001100 this is 12 (1*2^3+1*2^2+0*2^1+0*2^0)
and so 11111111111111111111111111110100 corresponds to -12
Example 2: ( | ) the OR opearator
This example shows the effect of using the | opearator.
class Bits2{
public static void main(String args[]){
System.out.println(" | OR opeartor");
// apply the | operator
int x = 11|10;
System.out.println("11|10 = "+x);
} }
Explanation of 11|10 = 11
11 in binary is: 00000000000000000000000000001101
10 in binary is: 00000000000000000000000000001100
apply the | operator to each individual bit and you obtain
00000000000000000000000000001101
in decimal form this number is: 1*2^3+1*2^2+0*2^1+1*2^0 = 11
Example 3: ( & ) the AND opearator
This example shows the effect of using the AND opearator.
class Bits3{
public static void main(String args[]){
System.out.println(" & OR opeartor");
// apply the & operator
int x = 11&10;
System.out.println("11&10 = "+x);
} }
Explanation of 11&10 = 10
11 in binary is: 00000000000000000000000000001101
10 in binary is: 00000000000000000000000000001100
apply the & operator to each individual bit and you obtain
00000000000000000000000000001100
in decimal form this number is: 1*2^3+1*2^2+0*2^1+0*2^0 = 10
Example 4: ( ^ ) the XOR opearator
This example shows the effect of using the XOR opearator.
class Bits3{
public static void main(String args[]){
System.out.println(" ^ XOR opeartor");
// apply the ^ operator
int x = 11^10;
System.out.println("11^10 = "+x);
} }
Explanation of 11^10 = 1
11 in binary is: 00000000000000000000000000001101
10 in binary is: 00000000000000000000000000001100
apply the ^ operator to each individual bit and you obtain
00000000000000000000000000000001
in decimal form this number is: 1*2^0 = 1