1. 程式人生 > >10.二進位制中1的個數

10.二進位制中1的個數

二進位制中1的個數

題目描述

輸入一個整數,輸出該數二進位制表示中1的個數。其中負數用補碼錶示。

具體實現:

解法一:

解題思路:為了避免移位n的時候出現死迴圈的問題,建立一個flag=1來和n與操作,來判斷n的最低位是否為1。

接著把flag左移移位得到2,再和n與操作,就能判斷n的次低位是否為1,…這樣迴圈左移,每次都能判斷n的一位是否為1.

public class Solution {
    public  int NumberOf1(int n) {
    	int flag = 1;
    	int sum = 0;//1的個數
    	while(flag != 0) {	//flag左移到最後溢位會變成0則跳出迴圈
if( (flag & n) != 0) { //flag(其中只有一位有1)和n做與操作,判斷n中當前位是否是1. sum++; } flag = flag << 1;//flag左移一位 } return sum; } }

解法二:

解題思路:把一個整數減去1,再喝原整數做與運算,會把該整數最右邊一個1程式設計0.那麼一個整數的二進位制表示中有多少個1,就可以進行多少次這樣的操作。

public int NumberOf1(int n) {
		 int sum = 0;
		 while( n != 0
) { ++sum; n = n & (n-1);//n去掉了最右邊的一個1 } return sum; }