【劍指offer】9.二進制中1的個數

題目

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

分析

這是一道考察二進制的題目

二進制或運算符(or):符號爲|,表示若兩個二進制位都爲0,則結果爲0,否則爲1。

二進制與運算符(and):符號爲&,表示若兩個二進制位都爲1,則結果爲1,否則爲0。

二進制否運算符(not):符號爲~,表示對一個二進制位取反。

異或運算符(xor):符號爲^,表示若兩個二進制位不相同,則結果爲1,否則爲0

左移運算符m << n 表示把m左移n位,左移n位的時候,最左邊的n位將被丟棄,同時在最右邊補上n個0,比如:

00001010<<2 = 00101000

右移運算符m >> n 表示把m右移n位,右移n位的時候,最右邊的n位將被丟棄,同時在最左邊補上n個0,比如:

00001010>>2 = 00000010

我們可以讓目標數字和一個數字做與運算

這個用戶比較的數字必須只有一位是1其他位是0,這樣就可以知道目標數字的這一位是否爲0。

所以用於比較的這個數字初始值爲1,比較完後讓1左移1位,這樣就可以依次比較所有位是否爲1。

代碼

function NumberOf1(n)
{
    let flag = 1;
    let count = 0;
    while(flag){
        if(flag & n){
            count++;
        }
       flag = flag << 1;
    }
    return count;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章