-1
int f(int n)
{
    int i, c = 0;
    for (i=0; i < sizeof(int)*8; i++, n >>= 1)
        c = (n & 0x01)? c+1: c;
    return c;
}

本で見つけたエクササイズですが、本当にわかりません!

4

2 に答える 2

7

渡されたパラメーターに設定されたビット数をカウントしますn(マシンのバイト数が 8 ビットであると仮定します)。私はあなたのコードにインラインでコメントします(そしてひどいフォーマットを修正します):

int f(int n)
{
    int i;     // loop counter
    int c = 0; // initial count of set bits is 0

    // loop for sizeof(int) * 8 bits (probably 32), 
    // downshifting n by one each time through the loop
    for (i = 0; i < sizeof(int) * 8; i++, n >>= 1) 
    {
        // if the current LSB of 'n' is set, increment the counter 'c',
        // otherwise leave it the same
        c = (n & 0x01) ? (c + 1) : c;  
    }

    return c;  // return total number of set bits in parameter 'n'
}
于 2013-01-09T18:35:13.120 に答える
-1

それはビット単位の and を実行しています - ビットをオフにし、ビットをオフにします。

于 2013-01-09T18:30:13.030 に答える