1. 程式人生 > >《劍指Offer》題目——位運算

《劍指Offer》題目——位運算

ati 劍指offer 多少 amp nes 位運算 規則 -s n)

題目描述:輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼表示。

題目分析:無論使用什麽方式,最關鍵的就是要考慮負數的處理方式

public class NumberOfOne {
    //方法一: 最優解
    public static int numberOfOnes(int n){
        int count =0 ;
        while (n!=0){
            n = n & (n-1);
            count++;
        }
        return count;
    }
    //方法二:考慮一下Java對應的數據類型的移位處理規則
public static int numberOfOnes1(int n){ int count = 0; int flag = 1; while (flag!=0 ){ if ((n & flag) !=0 ){ ++count; } flag = flag << 1; } return count; } public static void main(String[] args){
// System.out.println(numberOfOnes(-3)); System.out.println(numberOfOnes1(-2)); } }

擴展一下:

1. 用一條語句判斷一個整數是不是2的整數次方

答:判斷這個整數的二進制表示的1的個數是不是1個即可。

2. 輸入兩個整數m和n,計算需要改變m的二進制表示中多少位才能得到n。

答:分兩步:1)求這兩個數的異或,2)統計異或結果中1的個數

《劍指Offer》題目——位運算