1

次のコードで演習を行います

int FindFirstSet(unsigned BitMap, unsigned start)
{
    unsigned Mask = (1 << start);
    while (Mask)
    {
        if (BitMap & Mask) return start;
        ++start;
        Mask <<= 1;
    }
    return -1;
}

質問は :

「C++プログラミング言語では、符号なし整数のビット数は指定されていません。符号なし整数のビット数に関係なく、上記のコードが機能する理由を説明してください。」

この質問に従ってください。「ビットマップパラメータ」のタイプはどれでも、「開始パラメータ」にもビットマップのタイプがあると思いますか?

4

2 に答える 2

3

すべてのパラメーターと変数はunsignedintです。

于 2012-06-09T09:34:47.727 に答える
1

このコードは、MaskBitMapの長さが同じであり、の最大可能値startがの長さより大きいために機能しBitMapます。

ただし、このコードは常に期待どおりに機能するとは限りません。シフト演算子についてc++標準が言っていることは次のとおりです。 The behavior is undefined if the right operand is negative, or greater than or equal to the length in bits of the promoted left operand.

したがって、一部のコンパイラではFindFirstSet(1, 42)、-1ではなく42が返されることがあります。

于 2012-06-09T12:17:34.000 に答える