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...