#includevoid set_bit(void *base, unsigned long n) { unsigned long *m = (unsigned long*) base; unsigned long size = sizeof(unsigned long) * 8; m[ n / size ] |= 1UL << (n % size); } void clear_bit(void *base, unsigned long n) { unsigned long *m = (unsigned long*) base; unsigned long size = sizeof(unsigned long) * 8; m[ n / size ] &= ~(1UL << (n % size)); } int main() { unsigned long value[2] = {0}; set_bit(value, 0); set_bit(value, 63); printf("Set:\n"); printf("0x%016lx, 0x%016lx\n", value[0], value[1]); clear_bit(value, 0); clear_bit(value, 63); printf("Clear:\n"); printf("0x%016lx, 0x%016lx\n", value[0], value[1]); return 0; }