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

所有参数和变量都是无符号整数。

于 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)返回 42 而不是 -1。

于 2012-06-09T12:17:34.000 回答