|
|
|
#include <stdio.h>#define BYTE_LEN 8unsigned int direct_address_search(int T[], int k) { int byte_offset = k / BYTE_LEN; int bit_offset = k % BYTE_LEN; return (T[byte_offset] >> bit_offset) & 1u;}void direct_address_insert(int T[], int k) { int byte_offset = k / BYTE_LEN; int bit_offset = k % BYTE_LEN; T[byte_offset] |= (1u << bit_offset);}void direct_address_delete(int T[], int x) { int byte_offset = x / BYTE_LEN; int bit_offset = x % BYTE_LEN; T[byte_offset] &= (0u << bit_offset);}void info(unsigned int T[], int size) { int i; for (i = 0; i < size; i++) { printf("%d: %#X\n", i, T[i]); }}int main(int argc, const char *argv[]) { /* A 16 bit bit-vector */ unsigned int T[2] = {0}; direct_address_insert(T, 0); direct_address_insert(T, 2); printf("bit 1 is %d\n", direct_address_search(T, 1)); printf("bit 2 is %d\n", direct_address_search(T, 2)); info(T, 2); direct_address_delete(T, 0); direct_address_delete(T, 2); return 0;} |
|