二進位制中1的個數:輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。
思路:1.右移位運算》 和 與運算&
2.先移位個然後再與1 &運算為1的就是1
3.這裡如果是負數就會出現死迴圈,負數右移後高位會一直補1
4.因此要實現一下無符號位移
無符號右移的實現思路
1.這個負數右移n位後的結果,然後把符號位後n位的1變為0
2.2147483647 這個數是0...31個1 ,最大的正整數右移n-1位的結果 進行&運算
un_right(a,n)
$c = 2147483647>>($n-1);
return
$c&($a>>$n
);numberof1(n)
count=0
while n!=0
if n&1==1
count++n=un_right(n,1)
return
count
<?php//無符號位移
function un_right($a,$n)//
檢測整數二進位制中1的個數
function numberof1($n
)
$n=un_right($n,1);
}
return
$count;}
$r=numberof1(10);
var_dump($r);
二進位制 二進位制中1的個數
題目 請實現乙個函式,輸入乙個整數,輸出該數二進位制表示中 1 的個數。例如,把 9 表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函式輸出 2。示例 1 輸入 00000000000000000000000000001011 輸出 3 解釋 輸入的二進位制串 0000000...
演算法 二進位制中1的個數
輸入乙個整數,輸出該數二進位制表示中1的個數。其中負數用補碼表示。看到這個題目,就應該想到,這樣的題目需要用位運算來解決,這才是正確的門,要是沒想到用位運算,那就是還沒入門。思路一 既然是位運算,那可不可以直接用1與輸入n進行 位運算,結果為1的話,個數加一,否則個數不變,之後n向右位移1。這樣做是...
演算法 二進位制中1的個數
請實現乙個函式,輸入乙個整數 以二進位制串形式 輸出該數二進位制表示中 1 的個數。例如,把 9表示成二進位制是 1001,有 2 位是 1。因此,如果輸入 9,則該函式輸出 2。輸入 00000000000000000000000000001011 輸出 3 解釋 輸入的二進位制串 0000000...