1

次の関数:

int numOnesInBinary(int number) {
    int numOnes = 0;
    while (number != 0) {
        if ((number & 1) == 1) {
            numOnes++;
        }
        number >>= 1;
    }
    return numOnes;
}

は正の数に対してのみ機能します。負の数の場合、>> 演算を実行するときに常に左端のビットに 1 を追加するためです。Java では代わりに >>> を使用できますが、C++ ではどうすればよいでしょうか? C++ で符号なし整数を使用できるという本を読みましたが、符号なし整数は負の数を表すことができないため、その方法がわかりません。

4

4 に答える 4

0
// How about this method, as hinted in "C Book" by K & R.
// Of course better methods are found in MIT hackmem   
// http://www.inwap.com/pdp10/hbaker/hakmem/hakmem.html  
//
int numOnesInBinary(int number) {
    int numOnes = 0;
    // Loop around and repeatedly clear the LSB by number &= (number -1).  
    for (; number; numOnes++, number &= (number -1));
    return numOnes;
}
于 2015-11-20T14:08:24.020 に答える