2017-10-28 120 views
-3

您可以请帮助重新编写此代码。我无法理解按位左移实际如何工作。如果有更简单的方法来表示此代码,请让我知道。代表(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; 
} 
+0

否,右移位符号扩展。移位超过位数不确定。 – wildplasser

+0

@yano - 将负值向左移位会导致未定义的行为;将一个非负值向左移位(只要结果是可表示的)是明确的。 –

+0

啊,哎呀,这是'1'转移,我正在考虑'numchars' ..没有足够接近 – yano

回答

0
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; 
}