Bitwise operations
The operators
Operator | Name |
---|---|
| | OR |
& | AND |
^ | XOR |
<< | Left shift |
>> | Right shift |
~ | Not / One's complement |
The OR operator: |
- Combines two integers together
- For each bit processed if the bit of any of the members is 1, the result will be 1
- Used to "activate" bits
The OR operator: |
a: | 1 | 1 | 0 | 0 |
b: | 1 | 0 | 1 | 0 |
a|b | 1 | 1 | 1 | 0 |
The AND operator: &
- Filter active bits
- For each bit processed if the bits of both members is 1, the result will be 1
- Used for masks
The AND operator: &
a: | 1 | 1 | 0 | 0 |
b: | 1 | 0 | 1 | 0 |
a&b | 1 | 0 | 0 | 0 |
The XOR operator: ^
- Toggle bits
- For each bit processed if the bits of both members is the same, the result will be 0, otherwise 1
The XOR operator: ^
a: | 1 | 1 | 0 | 0 |
b: | 1 | 0 | 1 | 0 |
a^b | 0 | 1 | 1 | 0 |
The left shift: <<
- Shifts all bits to the left
- Discards the overflowing bits
- Sets to 0 the right most bits
- AKA: Multiplies by 2
The left shift: <<
a: | 0 | 0 | 1 | 1 | 0 | 1 | = 13 |
a << 1 | 0 | 1 | 1 | 0 | 1 | 0 | = 26 |
a << 2 | 1 | 1 | 0 | 1 | 0 | 0 | = 52 |
The right shift: >>
- Shifts all bits to the right
- Discards the underflowing bits
- Sets to 0 the left most bits
- AKA: Divides by 2
The right shift: >>
a: | 1 | 1 | 0 | 1 | 0 | 0 | = 52 |
a >> 1 | 0 | 1 | 1 | 0 | 1 | 0 | = 26 |
a >> 2 | 0 | 0 | 1 | 1 | 0 | 1 | = 13 |
And my personal favourite....
The not: ~
- Applied to a single value
- Toggles all the member's bits
- Used to create mask
Or complement to one
The not: ~
With signed integers:
~a = -1 * a - 1
~-1 = 0
Or complement to one
if (array.indexOf(val) == -1) // if NOT found
vs
if (!~array.indexOf(val)) // if NOT found
Real life usages
Real life usages
Group errors in a single value
Create an error reporting
Real life usages
Networking
Encryption
Real life usages
Color storage
RGB color:
- Red: 0 to 255, 1byte
- Green: 0 to 255, 1byte
- Blue: 0 to 255, 1byte
- Alpha: 0 to 255, 1byte
Real life usages
Color storage
Can be stored in a long (4 bytes)
#B2A3C5CC
R: B2 (178), G: A3 (163), B: C5 (197), A: CC (204)
10110010
10100011
11000101
11001100
which is -1297889844
Real life usages
Color storage
Components retrieval
Red value = (color >> 24) & 255
Green value = (color >> 16) & 255
Blue value = (color >> 8) & 255
Alpha value = color & 255
Real life usages
Flags storage
Collection of boolean values
Can be replaced with a single int to store up to 32 flags
Each boolean take 1 byte in memory
Operations to know
Activate a bit
Deactivate a bit
Get a bit value
Activate a bit
value | (1 << bitIndex)
Deactivate a bit
value & ~(1 << bitIndex)
Get a bit value
value & (1 << bitIndex)
Bitwise Operations
By Ghislain Rodrigues
Bitwise Operations
- 809