Advertisement
Guest User

bitmap

a guest
Sep 21st, 2014
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.05 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <errno.h>
  5.  
  6. unsigned char *bitmapinit(int n);
  7. unsigned char chkbit(unsigned char *map, int n);
  8. void setbit(unsigned char *map, int n);
  9. void unsetbit(unsigned char *map, int n);
  10.  
  11. unsigned char mask[8] = {1,2,4,8,16,32,64,128};
  12.  
  13. int main(int argc, char *argv[])
  14. {
  15.     int i;
  16.     unsigned char *bitmap = bitmapinit(1000);
  17.     if (!bitmap) {
  18.         perror("malloc: ");
  19.         exit(EXIT_FAILURE);
  20.     }
  21.     for (i = 0; i < 50; i++) {
  22.         setbit(bitmap, i);
  23.     }
  24.     for (i = 0; i < 50; i += 5) {
  25.         unsetbit(bitmap, i);
  26.     }
  27.     for (i = 0; i < 50; i++) {
  28.         printf("bit #%d = %d\n", i, (chkbit(bitmap, i))?1:0);
  29.     }
  30.     return 0;
  31. }
  32.  
  33. unsigned char *bitmapinit(int n)
  34. {
  35.     return (unsigned char *)calloc(sizeof(unsigned char), n / 8 + 1);
  36. }
  37. unsigned char chkbit(unsigned char *map, int n)
  38. {
  39.     return (unsigned char)map[n / 8] & mask[n % 8];
  40. }
  41. void setbit(unsigned char *map, int n)
  42. {
  43.     map[n / 8] = map[n / 8] | mask[n % 8];
  44. }
  45. void unsetbit(unsigned char *map, int n)
  46. {
  47.     map[n / 8] = map[n / 8] & ~(mask[n % 8]);
  48. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement