comparison c/bitVector/main.cc @ 51:898e8d9e1c67

implement variable bitContainers array
author Masataka Kohagura <kohagura@cr.ie.u-ryukyu.ac.jp>
date Mon, 01 Jun 2015 17:20:08 +0900
parents bb0e88fbbe02
children a2826bf4e80a
comparison
equal deleted inserted replaced
50:bb0e88fbbe02 51:898e8d9e1c67
1 #include <stdio.h> 1 #include <stdio.h>
2 #include <stdlib.h> 2 #include <stdlib.h>
3 #include <string.h> 3 #include <string.h>
4 4
5 unsigned long bitSet(int bitSetPosition, unsigned long bitContainer) { 5 typedef struct bitInfo {
6 int arrayNum;
7 unsigned long *bitContainer;
8 }BitInfo,*BitInfoPtr;
9
10 void bitSet(BitInfoPtr bi, int bitSetPosition) {
11
6 unsigned long tmp = 1; 12 unsigned long tmp = 1;
13 int arrayPosition = 0;
14
15 arrayPosition = bitSetPosition / 64;
16 bitSetPosition = bitSetPosition % 64;
17
7 tmp = tmp << (63 - bitSetPosition); 18 tmp = tmp << (63 - bitSetPosition);
8 bitContainer = bitContainer | tmp; 19 bi->bitContainer[arrayPosition] = bi->bitContainer[arrayPosition] | tmp;
9 return bitContainer;
10 } 20 }
11 21
12 void bitGet(unsigned long bitContainer) { 22 void bitPrint(BitInfoPtr bi) {
13 for (int i = 63; i >= 0; i--) { 23 for (int i = 0; i < bi->arrayNum ; i++) {
14 printf( "%lu", ( bitContainer >> i ) & 1 ); 24 for (int j = 63; j >= 0; j--) {
25 printf( "%lu", ( bi->bitContainer[i] >> j ) & 1 );
26 }
27 printf(" ");
15 } 28 }
16 puts(""); 29 puts("");
17 } 30 }
18 31
19 int main(int argc, char **argv) { 32 int main(int argc, char **argv) {
20 33
34 BitInfoPtr bi = (BitInfoPtr)malloc(sizeof(BitInfo));
21 int bitSetPosition = 0; 35 int bitSetPosition = 0;
22 unsigned long bitContainer = 0;
23 36
24 for (int i = 1; i < argc ; i++) { 37 for (int i = 1; i < argc ; i++) {
25 if (strcmp(argv[i],"-n") == 0) { 38 if (strcmp(argv[i],"-n") == 0) {
26 bitSetPosition = atoi(argv[i+1]); 39 bitSetPosition = atoi(argv[i+1]);
27 } 40 }
28 } 41 }
29 42
30 bitContainer = bitSet(bitSetPosition,bitContainer); 43 bi->arrayNum = (bitSetPosition + 1) / 64;
31 bitGet(bitContainer); 44 if (((bitSetPosition + 1) % 64) != 0) bi->arrayNum++;
45
46 printf("Array Num : %d\n",bi->arrayNum);
47
48 unsigned long bitContainer[bi->arrayNum];
49 for (int i = 0; i < bi->arrayNum; i++) {
50 bitContainer[i] = 0;
51 }
52
53 bi->bitContainer = bitContainer;
54 bitSet(bi,bitSetPosition);
55 bitPrint(bi);
32 return 0; 56 return 0;
33 } 57 }