
Bitwise operations are fundamental to embedded C programming. When developing firmware for microcontrollers, you rarely work with standard data types like int or float in a vacuum; instead, you directly manipulate hardware registers. These registers control everything from GPIO pins (turning an LED on or off) to complex peripherals like UARTs, SPI buses, and timers. Because hardware registers are typically memory-mapped and represent individual control bits, bitwise operators are the primary tool for reading and writing these bits efficiently without affecting adjacent bits in the same register.
Understanding how to set, clear, toggle, and test individual bits using masks is a critical skill for any embedded software engineer. In many coding interviews for embedded roles, candidates are expected to demonstrate fluency in bitwise logic to prove they can safely interact with hardware at the lowest level.
The bitwise operators available in C are:
&|^<<>>~This C program shows some common usages of the bitwise operators, serving as a quick reference for standard bit manipulation idioms.
#include <stdio.h>int main(void){int x = 0x1u;// Set 2nd bitx |= (1u << 2);printf("%d\n", x);// Clear 2nd bitx &= ~(1u << 2);printf("%d\n", x);// Toggle 2nd bitx ^= (1 << 2);printf("%d\n", x);// Test 2nd bitx & (1u << 2) ? puts("true") : puts("false");return 0;}
The code fragment x |= (1u << 2); sets the 2nd bit by shifting the value 1 left by 2 positions. Similarly the code fragment x &= ~(1u << 2); clears the second bit by shifting the value 1 by 2 positions to the left and doing a 1’s complement.
The line x ^= (1 << 2); toggles the 2nd bit by left shifting the value 1 by 2 positions and XORing with the value to be modified.
The code fragment x & (1u << 2) ? puts(“true”) : puts(“false”); tests the bit at position 2 by creating a mask by shifting 1 by 2 positions to the left and use the bit-wise & operator to check if the result is not 0 or otherwise.
Quick Links
Legal Stuff





