我使用以下代码进行练习
int FindFirstSet(unsigned BitMap, unsigned start)
{
unsigned Mask = (1 << start);
while (Mask)
{
if (BitMap & Mask) return start;
++start;
Mask <<= 1;
}
return -1;
}
问题是:
“C ++编程语言没有指定无符号中有多少位 整数。解释为什么上面的代码无论一个位中的位数如何都能工作 无符号整数。“
按照这个问题,我能想到:任何类型的“位图参数”,“开始参数”也有Bitmap的类型?
答案 0 :(得分:3)
所有参数和变量都是无符号的int。
答案 1 :(得分:1)
此代码有效,因为Mask
和BitMap
的长度相同,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。