本文實(shí)例講述了php實(shí)現(xiàn)統(tǒng)計二進(jìn)制中1的個數(shù)算法。分享給大家供大家參考,具體如下:
問題
輸入一個十進(jìn)制整數(shù),輸出該數(shù)二進(jìn)制表示中1的個數(shù)。其中負(fù)數(shù)用補(bǔ)碼表示。
解決思路
這是個位運(yùn)算的題目。
解法一:可以通過按位與操作,通過將每一位和1與操作來求出1的個數(shù)。
解法二(最優(yōu)解):一個巧妙的方法,一個不為0的二進(jìn)制數(shù),肯定至少有一位是1,當(dāng)這個數(shù)減一的時候,它的最后一位1會變?yōu)?,后邊的所有0會變?yōu)?。比如10100,減一之后會變?yōu)?0011,然后用原數(shù)字10100和10011進(jìn)行與操作之后,會得到10000,也就是通過這個操作,可以將一個1變?yōu)?,所以一個二進(jìn)制數(shù)字能進(jìn)行多少次這樣的操作,就有多少個1.
實(shí)現(xiàn)代碼
//解法一function NumberOf1($n) $count = 0; $flag = 1; while ($flag != 0) { if (($n $flag) != 0) { $count++; $flag = $flag 1; return $count;}
// 解法二function NumberOf1($n) $count = 0; if($n 0){ // 處理負(fù)數(shù) $n = $n 0x7FFFFFFF; ++$count; while($n != 0){ $count++; $n = $n ($n-1); return $count;}
//測試$num=45;echo $num. 的二進(jìn)制是 .decbin($num). br/ echo $num. 共有 .NumberOf1($num). 個1
運(yùn)行結(jié)果:
PHP開發(fā)之用微信遠(yuǎn)程遙控服務(wù)器的相關(guān)講解
CI框架(CodeIgniter)操作redis的方法的詳解
php使用imagecopymerge()函數(shù)創(chuàng)建半透明水印的詳解
以上就是php實(shí)現(xiàn)統(tǒng)計二進(jìn)制中1的個數(shù)算法的示例的詳細(xì)內(nèi)容,PHP教程
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選