剣指offer-バイナリ中1の個数-java


タイトルの説明:
整数を入力し、その数のバイナリ表現の1つの数を出力します.ここで負数は補数で表される.
構想解析:https://www.nowcoder.com/questionTerminal/8ee967e43c2c4ec193b040ea7fbb10b8
1つの整数が0でない場合、この整数の少なくとも1つは1である.この整数を1に減らすと、元の整数の右端にある1が0になり、元の1の後ろにあるすべての0が1になります(右端の1の後ろに0があれば).残りのすべてのビットは影響を受けません.
例を挙げると、1つのバイナリ数1100で、右から3番目のビットは最も右にある1です.1を減算すると、3位は0になり、その後ろの2位は0が1になり、前の1は変わらないので、1011が得られた結果、1を減算した結果、右端の1つの1から始まるすべてのビットが逆になったことが分かった.このとき、元の整数と1を減算した結果を演算すると、元の整数の一番右の1つからすべてのビットが0になります.つまり、1つの整数から1を減算し、元の整数と演算すると、その整数の右端の1つが0になります.では、1つの整数のバイナリに何個の1があるか、何回このような操作を行うことができます.
コード:
public class Solution {
    public int NumberOf1(int n) {
        int count =0;
        while(n!=0){
            count++;
            n=(n-1)&n;
        }
        return count;
    }
}