#include /* return whether a given bit is 1 or not */ int test_bit(unsigned int value, int bit_number) { int mask = 1 << bit_number; if ((value & mask) == 0) { return 0; } else { return 1; } } /* sets a bit in a number to 1 */ void set_bit(unsigned int* value, int bit_number) { int mask = 1 << bit_number; *value = *value | mask; } /* clear a bit in a number to 0 */ void clear_bit(unsigned int* value, int bit_number) { int mask = ~(1 << bit_number); *value = *value & mask; } /* invert a given bit in a number */ void flip_bit(unsigned int* value, int bit_number) { int mask = 1 << bit_number; *value = *value ^ mask; } int main() { unsigned int value; /* test testing a bit */ printf("Enter a number: "); scanf("%d", &value); for (int i = 31; i >= 0; i--) { printf("%d", test_bit(value, i)); } printf("\n"); /* test setting a bit. should print 21 */ value = 0; set_bit(&value, 0); set_bit(&value, 2); set_bit(&value, 4); printf("%d (should say 21)\n", value); /* test clearing a bit, should print 42 */ value = 63; clear_bit(&value, 0); clear_bit(&value, 2); clear_bit(&value, 4); printf("%d (should say 42)\n", value); /* test swapping a bit, should print 57 */ value = 53; flip_bit(&value, 3); flip_bit(&value, 2); printf("%d (should say 57)\n", value); return 0; }