《劍指Offer》題目——位運算
阿新 • • 發佈:2017-06-04
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》題目——位運算