1. 程式人生 > >《劍指Offer》位運算--二進位制中1的個數

《劍指Offer》位運算--二進位制中1的個數

時間限制:1秒 空間限制:32768K 熱度指數:304381

題目描述

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

知識點:

1、計算機中的符號數有三種表示方法,即原碼反碼和補碼。三種表示方法均有符號位和數值位兩部分,符號位都是用0表示“正”,用1表示“負”,而數值位,三種表示方法各不相同。在計算機系統中,數值一律用補碼來表示和儲存。原因在於,使用補碼,可以將符號位和數值域統一處理;同時,加法和減法也可以統一處理。

2、首先必須明白二進位制數在記憶體中的存放形式,二進位制數在記憶體中是以補碼的形式存放的。

正數和負數的補碼不一樣,正數的補碼,反碼都是其本身。 

負數的補碼是:符號位不變,其餘各位求反,末位加1 ,既-1的補碼為11111

反碼是:符號位為1,其餘各位求反,但末位不加1 ,既-1的反碼為11110

負數的補碼有兩種:負數的補碼={原碼符號位不變} + {數值位按位取反後+1} 或者 ={原碼符號位不變} + {數值位從右數第1個1及其它右邊的0保持不變,左邊按位取反}

public class Solution {
    public int NumberOf1(int n) {
        int count = 0;
        //直接呼叫十進位制轉位二進位制的方法
        String binaryNum = Integer.toBinaryString(n);
        for(int i = 0; i < binaryNum.length(); i++){
            if(binaryNum.charAt(i) == '1')
                count++;
        }
        return count;
    }
}