如何計算乙個數字的二進位制形式裡1的個數?

2021-09-01 00:19:45 字數 774 閱讀 3816

int func(int x)

return countx;

}這道題其實是微軟的一道面試題。面試的原題為:

求下面函式的返回值

int func(x)

return countx;

} 假定x = 9999,就函式的返回值。答案是8,即9999的二級制形式中1的個數。

x=x&(x-1)

**********====

以前沒有見過這樣的表示式,分析一下發現發明這個表示式的人是個高手。

表示式的意思就是把x的二進位制表示從最低位直到遇到第乙個1的位元置0。

例如:e1:

x           =   01001000

x-1       =   01000111

x&(x-1)=01000000

e2:x           =   01001001

x-1       =   01001000

x&(x-1)=01001000

別人的總結:

就用e1作為例子

第一次位於運算的結果是01000000

那麼繼續x-1,則x-1=00111111

那麼繼續位於運算:

01000000&00111111=00000000

此時迴圈的變數x為0,迴圈終止。

用來計數的countx也就是說明了二進位制數種有幾個1.

但是我們傳進去的引數是整數,例如傳9999呢?

看到&運算,肯定是變成二進位制算,所以傳什麼就是多慮了。

JS 二進位制計算,如何得到乙個負數的二進位制表示

題目 輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示 收穫 1.由負數的補碼求他的絕對值補碼 負二進位制數的絕對值,只要各位 包括符號位 取反,再加1,就得到其絕對值。2.負數正碼取反 不包括符號位 1即得到補碼表示 3.js中求二進位制,number tostring 2 負數和...

求乙個數字二進位制中 1 的個數

任意給定乙個 32 位無符號的整數 n,計算 n 的二進位制表示中 1 的個數,比如 n 3 011 時,返回 2 通過移位解決,每次向右移一位 1 然後判斷最後一位是不是 1 1 最多迴圈 32 次 int bitcount unsigned int n n n 1 return count 使用...

查詢乙個數的二進位制形式中 1 的個數

查詢乙個數的二進位制形式中 1 的個數 include int main void i i 2 a k j k k for k 31 k printf d a k printf n printf d n count printf n printf main over n 利用 位與 進行優化 inc...