代表(C)
问题描述:
您可以请帮助重新编写此代码。我无法理解按位左移实际如何工作。如果有更简单的方法来表示此代码,请让我知道。代表(C)
此代码用于计算数字的位表示中的1(个)的数量。
int numberofones(int value, int count) {
int numchars = 8 * sizeof(int);
int n;
for(n = 0; n < numchars; n++)
{
if(value & (1 << (numchars - 1 - n))) {
count++;
}
}
return count;
}
答
int numberofones(int value) {
int numchars = 8 * sizeof(int);
int n;
int count = 0 ;
for(n = 0; n < numchars; n++)
{
if(value & (1 << n))
count++;
}
return count;
}
否,右移位符号扩展。移位超过位数不确定。 – wildplasser
@yano - 将负值向左移位会导致未定义的行为;将一个非负值向左移位(只要结果是可表示的)是明确的。 –
啊,哎呀,这是'1'转移,我正在考虑'numchars' ..没有足够接近 – yano