bitwise operator

| Operator | Name | Description | Example 
| --- | --- | --- | ---
| ~ | NOT | Inverts all bits | ~5 = ~0101 = 1010 = 10
| & | AND | Sets each bit to 1 if both bits are 1 | 5 & 1 = 0101 & 0001 = 0001 = 1 
| \| | OR | Sets each bit to 1 if any of the two bits is 1 | 5 \| 1 = 0101 \| 0001 = 0101 = 5
| ^ | XOR | Sets each bit to 1 if only one of the two bits is 1 | 5 ^ 1 = 0101 ^ 0001 = 0100 = 4 
| << | left shift | Shift left by pushing zeroes in from the right and letting the leftmost bits fall off | 9 << 1 = 1001 << 1 = 0010 = 2 
| >> | Arithmetic right shift | Shift right by pushing copies of the leftmost bit in from the left and letting the rightmost bits fall off | 9 >> 1 = 1001 >> 1 = 1100 = 12 
| >>> | Logical right shift | Shift right by pushing zeroes in from the left and letting the rightmost bits fall off | 9 >>> 1 = 1001 >>> 1 = 0100 = 4