#include <stdio.h>
#include <stdint.h>
#define BIT(n) (1u << (n))
#define SET_BIT(reg, n) ((reg) |= BIT(n))
#define CLEAR_BIT(reg, n) ((reg) &= ~BIT(n))
#define TOGGLE_BIT(reg, n) ((reg) ^= BIT(n))
// Now, whenever BIT(n) is encountered, the compiler replaces it with (1u << (n))
// So, SET_BIT(reg, n) is replaced with reg |= bit(n) => reg |= (1u << n)
uint8_t modify_register(uint8_t reg){
SET_BIT(reg, 2);
SET_BIT(reg, 7);
CLEAR_BIT(reg, 3);
TOGGLE_BIT(reg, 5);
/*
This entire block is replaced with:
reg |= 0b10000100;
reg &= ~0b00001000;
reg ^= 0b00100000;
*/
return reg;
}
int main() {
uint8_t reg;
scanf("%hhu", ®);
printf("%u", modify_register(reg));
return 0;
}
Input
0
Expected Output
164