Maison  >  Article  >  développement back-end  >  Explication détaillée des étapes de l'algorithme pour implémenter des statistiques sur le nombre de 1 dans un système binaire en utilisant PHP

Explication détaillée des étapes de l'algorithme pour implémenter des statistiques sur le nombre de 1 dans un système binaire en utilisant PHP

php中世界最好的语言
php中世界最好的语言original
2018-05-19 14:16:121649parcourir

Cette fois, je vais vous apporter une explication détaillée des étapes de l'algorithme pour implémenter le comptage statistique du nombre de 1 dans un système binaire en PHP. Quelles sont les précautions pour implémenter l'algorithme statistique de. le nombre de 1 dans un système binaire en PHP Ce qui suit est un cas pratique. Levez-vous et jetez un œil.

Question

Saisissez 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 opération de bit question.
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";

En cours d'exécution résultat :

Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !

Lecture recommandée :

Explication détaillée des étapes pour implémenter l'effet de pool de connexions MySQL en php

localhost ne peut pas être utilisé après que Win10 Apache ait configuré l'hôte virtuel Comment gérer

analyse des étapes d'utilisation de PHP CURL et Java http

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