# HG changeset patch # User Masataka Kohagura # Date 1433146808 -32400 # Node ID 898e8d9e1c6757f3346fcfbd4f2521a2958df975 # Parent bb0e88fbbe029eb56d03f5f890633af48fe3dc84 implement variable bitContainers array diff -r bb0e88fbbe02 -r 898e8d9e1c67 c/bitVector/main.cc --- a/c/bitVector/main.cc Tue May 26 00:54:52 2015 +0900 +++ b/c/bitVector/main.cc Mon Jun 01 17:20:08 2015 +0900 @@ -2,24 +2,37 @@ #include #include -unsigned long bitSet(int bitSetPosition, unsigned long bitContainer) { +typedef struct bitInfo { + int arrayNum; + unsigned long *bitContainer; +}BitInfo,*BitInfoPtr; + +void bitSet(BitInfoPtr bi, int bitSetPosition) { + unsigned long tmp = 1; + int arrayPosition = 0; + + arrayPosition = bitSetPosition / 64; + bitSetPosition = bitSetPosition % 64; + tmp = tmp << (63 - bitSetPosition); - bitContainer = bitContainer | tmp; - return bitContainer; + bi->bitContainer[arrayPosition] = bi->bitContainer[arrayPosition] | tmp; } -void bitGet(unsigned long bitContainer) { - for (int i = 63; i >= 0; i--) { - printf( "%lu", ( bitContainer >> i ) & 1 ); +void bitPrint(BitInfoPtr bi) { + for (int i = 0; i < bi->arrayNum ; i++) { + for (int j = 63; j >= 0; j--) { + printf( "%lu", ( bi->bitContainer[i] >> j ) & 1 ); + } + printf(" "); } puts(""); } int main(int argc, char **argv) { + BitInfoPtr bi = (BitInfoPtr)malloc(sizeof(BitInfo)); int bitSetPosition = 0; - unsigned long bitContainer = 0; for (int i = 1; i < argc ; i++) { if (strcmp(argv[i],"-n") == 0) { @@ -27,7 +40,18 @@ } } - bitContainer = bitSet(bitSetPosition,bitContainer); - bitGet(bitContainer); + bi->arrayNum = (bitSetPosition + 1) / 64; + if (((bitSetPosition + 1) % 64) != 0) bi->arrayNum++; + + printf("Array Num : %d\n",bi->arrayNum); + + unsigned long bitContainer[bi->arrayNum]; + for (int i = 0; i < bi->arrayNum; i++) { + bitContainer[i] = 0; + } + + bi->bitContainer = bitContainer; + bitSet(bi,bitSetPosition); + bitPrint(bi); return 0; }