我们传递给参数的无符号类型是什么?

时间:2012-06-09 09:23:39

标签: c++ types unsigned

我使用以下代码进行练习

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

问题是:

“C ++编程语言没有指定无符号中有多少位 整数。解释为什么上面的代码无论一个位中的位数如何都能工作 无符号整数。“

按照这个问题,我能想到:任何类型的“位图参数”,“开始参数”也有Bitmap的类型?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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。