#include /* returns 1 if the bit in value is set, and 0 otherwise */ int test_bit(unsigned int value, int bit_number) { unsigned 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) { unsigned 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) { unsigned int mask = ~(1 << bit_number); *value = *value & mask; } int main() { unsigned int value; int i; /* test testing a bit */ printf("Enter a number: "); scanf("%d", &value); for (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); return 0; }