2013-04-05 2 views
0

저는 BitArray 객체를 생성하는 생성자가 있습니다.이 생성자는 사용자에게 사용하려는 비트 수를 묻습니다. 그런 다음 서명되지 않은 문자를 사용하여 많은 문자를 보유하는 데 필요한 바이트를 저장합니다. 그런 다음 사용자가 특정 비트를 '설정'할 수있는 메소드를 작성하고 끝에 전체 바이트 세트를 표시하고자합니다. 그러나, 내 설정 메서드는 비트를 변경하지 않는 것, 그 또는 내 인쇄 기능 (오버로드) 실제로 실제 비트를 인쇄하는 것 같지 않습니다. 누군가 문제를 지적 할 수 있습니까?동적 배열에서 비트 설정 및 표시

생성자

BitArray::BitArray(unsigned int n) 
{ 

//Now let's find the minimum 'bits' needed 

n++; 
//If it does not "perfectly" fit 
//------------------------------------ehhhh 
if((n % BYTE) != 0) 
    arraySize =(n/BYTE); 
else 
    arraySize = (n/BYTE) + 1; 

//Now dynamically create the array with full byte size 
barray = new unsigned char[arraySize]; 

//Now intialize bytes to 0 
for(int i = 0; i < arraySize; i++) 
{ 
    barray[i] = (int) 0; 
} 

} 

설정 방법 :

void BitArray::Set(unsigned int index) 
{ 
     //Set the Indexed Bit to ON 
     barray[index/BYTE] |= 0x01 << (index%BYTE); 
} 

인쇄 과부하 :

ostream &operator<<(ostream& os, const BitArray& a) 
{ 
     for(int i = 0; i < (a.Length()*BYTE+1); i++) 
     { 
      int curNum = i/BYTE; 
      char charToPrint = a.barray[curNum]; 
      os << (charToPrint & 0X01); 
      charToPrint >>= 1; 
     } 
    return os; 
} 
+0

아마 혼란 스럽네요.하지만 각 인덱스에 개별 '비트'값을 저장하기 위해'char []'배열을 사용하는 것 같습니다. 그렇다면'Set' 함수는 다음과 같아야합니다 :'barray [index-1] = '1';'? 배열의 각'char'가 1 또는 0을 유지하려면 시프 팅이 필요 없습니다. –

답변

0
for(int i = 0; i < (a.Length()*BYTE+1); i++) 
    { 
     int curNum = i/BYTE; 
     char charToPrint = a.barray[curNum]; 
     os << (charToPrint & 0X01); 
     charToPrint >>= 1; 
    } 

당신이 당신의 루프를 실행할 때마다, 당신은 charToPrint에 대한 새 값을 가져 오는 있습니다 . 즉, 작업 charToPrint >>= 1;은 루프가 실행될 때까지 수행되지 않으므로 쓸모가 없습니다. 따라서 배열의 각 char의 첫 번째 비트 만 항상 인쇄합니다.

+0

감사합니다. – JcKelley