title |
subtitle |
summary |
authors |
tags |
categories |
date |
lastmod |
featured |
draft |
image |
projects |
Bit magic in C (and C++) |
Tips and trick for embedded C/C++ |
Tips and trick for embedded C/C++ |
|
|
|
2020-06-13T19:01:19+02:00 |
2020-06-13T19:01:19+02:00 |
false |
false |
caption |
focal_point |
preview_only |
|
|
false |
|
|
Set a bit
// Set one bit high at position "bit" in input and store to output
output = input | (1 << bit);
// Shorthand
variable |= (1 << bit);
// Multiple bits
variable |= (0b101 << bit);
Clear a bit
// Clear one bit high at position "bit" in input and store to output
output = input & ~(1 << bit);
// Shorthand
variable &= ~(1 << bit);
// Multiple bits
variable &= ~(0b101 << bit);
Toggle a bit
// Clear one bit high at position "bit" in input and store to output
output = x ^ (1 << bit);
// Shorthand
variable ^= (1 << bit);
// Multiple bits
variable ^= (0b101 << bit);
Math
// Division using bitshift
output = input >> 1; // Divide by 2
output = input >> 2; // Divide by 4
output = input >> 3; // Divide by 8
// Multiply using bitshifting
output = input << 1; // Multiply by 2
output = input << 2; // Multiply by 4
output = input << 3; // Multiply by 8
Set X number of bits high.
output = (0b1 << X) -1;
Miscellaneous
// Check if number is ODD
if( (num & 1) == 1) {};
// Flip signed integer
num = ~num + 1;
// Power of two
num > 0 && (num & (num - 1)) == 0;