溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

使用php怎么統(tǒng)計(jì)二進(jìn)制中1的個(gè)數(shù)

發(fā)布時(shí)間:2021-04-12 16:09:56 來源:億速云 閱讀:231 作者:Leah 欄目:開發(fā)技術(shù)

今天就跟大家聊聊有關(guān)使用php怎么統(tǒng)計(jì)二進(jìn)制中1的個(gè)數(shù),可能很多人都不太了解,為了讓大家更加了解,小編給大家總結(jié)了以下內(nèi)容,希望大家根據(jù)這篇文章可以有所收獲。

問題

輸入一個(gè)十進(jìn)制整數(shù),輸出該數(shù)二進(jìn)制表示中1的個(gè)數(shù)。其中負(fù)數(shù)用補(bǔ)碼表示。

解決思路

這是個(gè)位運(yùn)算的題目。
解法一:可以通過按位與操作,通過將每一位和1與操作來求出1的個(gè)數(shù)。
解法二(最優(yōu)解):一個(gè)巧妙的方法,一個(gè)不為0的二進(jìn)制數(shù),肯定至少有一位是1,當(dāng)這個(gè)數(shù)減一的時(shí)候,它的最后一位1會(huì)變?yōu)?,后邊的所有0會(huì)變?yōu)?。比如10100,減一之后會(huì)變?yōu)?0011,然后用原數(shù)字10100和10011進(jìn)行與操作之后,會(huì)得到10000,也就是通過這個(gè)操作,可以將一個(gè)1變?yōu)?,所以一個(gè)二進(jìn)制數(shù)字能進(jìn)行多少次這樣的操作,就有多少個(gè)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)."個(gè)1";

運(yùn)行結(jié)果:

使用php怎么統(tǒng)計(jì)二進(jìn)制中1的個(gè)數(shù)

看完上述內(nèi)容,你們對使用php怎么統(tǒng)計(jì)二進(jìn)制中1的個(gè)數(shù)有進(jìn)一步的了解嗎?如果還想了解更多知識(shí)或者相關(guān)內(nèi)容,請關(guān)注億速云行業(yè)資訊頻道,感謝大家的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI