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";
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!