1. 程式人生 > >[劍指offer]二進位制中1的個數

[劍指offer]二進位制中1的個數

在這裡插入圖片描述
思路:
用1一直左移運算,和n的每位進行與運算,因為左移運算結果都為2的倍數,與運算結果不為0則說明有二進位制表示有1。
需要注意的是如果直接用n進行運算,如if((n&1)==1),之後還用n=n>>1的,如果為負數,經過右移最後一位就會變成1,而這就會陷入死迴圈。
實現:

public class Solution {
    public int NumberOf1(int n) {
        int count = 0;
        int flag = 1;
        while (flag != 0) {
            if ((n &
flag) != 0) { count++; } flag = flag << 1; } return count; } }

大佬實現:

public class Solution {
    public int NumberOf1(int n) {
		int count = 0;
        while (n != 0) {
            ++count;
            n = (n - 1) & n;
        }
        return
count; } }