Bit Array를 구현하기 위한 C++ 프로그램입니다. 비트 배열은 데이터를 압축적으로 저장하는 배열 데이터 구조입니다. 기본적으로 간단한 데이터 구조를 구현하는 데 사용됩니다.
알고리즘
함수 및 의사코드:
Begin Function getBit(int val,int pos) singleBit->b = 0 if(pos == 0) singleBit->b = val & 1 else singleBit->b = ( val & (1 << pos ) ) >> pos return singleBit Function setBit(BitArr *bt,B *bit,int pos) bt->bVal[pos] = bit return bt Function getVal(BitArr *bArray) initialize val = 0 initialize bVal = 0 bVal = bArray->bVal[0]->b val= val|bVal for i = 1 to B_A_LENGTH-1 bVal = bArray->bVal[i]->b bVal =bVal << i val=val | bVal return val done End.
예시 코드
#include <iostream> #include <string> using namespace std; #define B_A_LENGTH 4 typedef struct { unsigned int b : 1; } B; class BitArr { private: B **bVal; public: BitArr() { bVal = new B* [B_A_LENGTH]; } B *getBit(int val,int pos) { B *singleBit = new B; singleBit->b = 0; if(pos == 0) { singleBit->b = val & 1; } else { singleBit->b = ( val & (1 << pos ) ) >> pos; } return singleBit; } BitArr *setBit(BitArr *bt,B *bit,int pos) { bt->bVal[pos] = bit; return bt; } int getVal(BitArr *bArray) { int val = 0; unsigned int bVal = 0; bVal = bArray->bVal[0]->b; val |= bVal; for(int i = 1; i < B_A_LENGTH; i++) { bVal = bArray->bVal[i]->b; bVal <<= i; val |= bVal; } return val; } }; int main() { int v; cout<<"Enter 4 bit integer value (0 - 8): "; cin>>v; BitArr bt, *samplebt; samplebt = new BitArr; for (int i = 0; i < B_A_LENGTH; i++) { samplebt = bt.setBit(samplebt, bt.getBit(v, i), i); cout<<"Bit of "<<v<<" at positon "<<i<<": "<<"\n"<<bt.getBit(v, i)->b<<endl; } cout<<"The value is: "<<bt.getVal(samplebt)<<endl; return 0; }
출력
Enter 4 bit integer value (0 - 8): 6Bit of 6 at positon 0: 0 Bit of 6 at positon 1: 1 Bit of 6 at positon 2: 1 Bit of 6 at positon 3: 0 The value is: 6