0

BitArray オブジェクトを作成するコンストラクターがあります。このオブジェクトは、ユーザーに使用したい「ビット」数を尋ねます。次に、unsigned chars を使用して、多数を保持するために必要なバイトを格納します。次に、ユーザーが特定のビットを「設定」し、最後にバイトの完全なセットを表示できるようにするメソッドを作成したいと考えています。ただし、私の Set メソッドはビットを変更していないようです。または、印刷関数 (オーバーロード) が実際のビットを実際に印刷していないようです。誰かが問題を指摘できますか?

コンストラクタ

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;
}
4

1 に答える 1

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;
    }

ループを実行するたびに、 の新しい値を取得していますcharToPrintcharToPrint >>= 1;これは、ループが次に実行されるまで変更が実行されないため、操作が役に立たないことを意味します。したがって、常に各char配列の最初のビットのみを出力します。

于 2013-04-05T01:56:55.123 に答える