Maison  >  Article  >  développement back-end  >  Exemple d'implémentation PHP du comptage du nombre de 1 dans un algorithme binaire

Exemple d'implémentation PHP du comptage du nombre de 1 dans un algorithme binaire

jacklove
jackloveoriginal
2018-06-29 17:34:421464parcourir

Cet article présente principalement l'algorithme pour réaliser le nombre 1 en binaire statistique en PHP, et analyse la traversée de chaînes PHP, le jugement, les statistiques et d'autres compétences opérationnelles connexes sous forme d'exemples. Les amis dans le besoin peuvent s'y référer

L'exemple de cet article décrit l'implémentation de l'algorithme de comptage de 1 en binaire statistique en PHP. Partagez-le avec tout le monde pour votre référence. Les détails sont les suivants :

Question

Entrez un entier décimal et affichez le nombre de 1 dans la représentation binaire du nombre. Les nombres négatifs sont exprimés en complément à deux.

Idée de solution

Il s'agit d'une question sur l'arithmétique sur un seul bit.

Solution 1 : vous pouvez utiliser l'opération ET au niveau du bit pour trouver le nombre de 1 en exécutant l'opération AND sur chaque bit avec 1.
Solution 2 (solution optimale) : Une méthode astucieuse. Un nombre binaire qui n'est pas 0 doit avoir au moins un chiffre qui vaut 1. Lorsque ce nombre est réduit de un, son dernier chiffre, 1, deviendra 0. Tous les 0 suivants seront remplacés par des 1. Par exemple, 10100 deviendra 10011 après en avoir soustrait un. Ensuite, après avoir combiné les nombres d'origine 10100 et 10011, vous obtiendrez 10000. Autrement dit, grâce à cette opération, vous pouvez changer un 1 en un 0, donc combien de fois un binaire peut-il le faire. numéro faire ça ? Il y a autant d'opérations qu'il y en a 1.

Code d'implémentation

//解法一
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){ // 处理负数
   $n = $n&0x7FFFFFFF;
   ++$count;
 }
 while($n != 0){
  $count++;
  $n = $n & ($n-1);
 }
 return $count;
}

//测试
$num=45;
echo $num."的二进制是".decbin($num)."<br/>";
echo $num."共有".NumberOf1($num)."个1";

Résultats en cours :

Articles qui pourraient vous intéresser :

Explication connexe du serveur de contrôle à distance WeChat pour le développement PHP

Framework CI (CodeIgniter ) Explication détaillée de la méthode de fonctionnement de redis

Explication détaillée de l'utilisation de la fonction imagecopymerge() pour créer un filigrane translucide en PHP

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn