【发布时间】:2015-11-20 09:09:12
【问题描述】:
如下函数:
int numOnesInBinary(int number) {
int numOnes = 0;
while (number != 0) {
if ((number & 1) == 1) {
numOnes++;
}
number >>= 1;
}
return numOnes;
}
只适用于正数,因为在负数的情况下,它总是在执行 >> 操作时将最左边的位加 1。在 Java 中我们可以使用 >>> 来代替,但是我们如何在 C++ 中做到这一点呢? 我在一本书中读到我们可以在 C++ 中使用无符号整数,但我不明白为什么无符号整数不能表示负数。
【问题讨论】:
-
这是一个关于 C/C++ 的问题,所以这里离题了。
-
这是一个需要调用 C++ 实现的未定义行为的问题,因此只有该特定架构的编译器编写者才能回答。全面的 SE 题外话...
-
这不是题外话吗?
-
您不需要它来保存值并因此表示负值,您只需要保留位模式。
-
问题没有明确定义。 -1 中有多少个 1 位? -1 的正确答案是什么?无穷大?
标签: c++ bit-manipulation bitcount