gmp_popcount

(PHP 4 >= 4.0.4, PHP 5, PHP 7, PHP 8)

gmp_popcount — Comptage de population

Description

function gmp_popcount(GMP |int |string $num): int

Dénombre la population de num.

Liste de paramètres

num

Un objet GMP , un entier, ou un chaîne de caractères qui peut être interprété comme un nombre suivant la même logique que si la chaîne était utilisée dans gmp_init() avec détection automatique de la base (c'est-à-dire lorsque base est égal à 0).

Valeurs de retour

La population de num, sous la forme d'un int .

Exemples

Exemple #1 Exemple avec gmp_popcount()

<?php
$pop1 = gmp_init("10000101", 2); // 3 1's
echo gmp_popcount($pop1) . "\n";
$pop2 = gmp_init("11111110", 2); // 7 1's
echo gmp_popcount($pop2) . "\n";
?>

L'exemple ci-dessus va afficher :

3
7

Found A Problem?

Learn How To Improve This Page • Submit a Pull Request • Report a Bug
+add a note

User Contributed Notes 2 notes

up
0
ketrab2004
4 years ago
Another way to get the population count when you don't have the gmp extension is using bitwise operations:
<?php
$int = 133; // 10000101
for($count = 0; $int != 0; $count++) // repeat until $int is 0 (and count the amount of steps it takes in $count)
{
 $int = $int & $int-1; // remove the right most 1 from $int using the bitwise and operator
}
echo $count; // 3
?>

This is Kernighan's population count.
https://youtu.be/ZRNO-ewsNcQ?t=510 has a nice explanation on how it works
up
0
phpmanual at headbank dot co dot uk
7 years ago
If you don't have gmp extension enabled (or don't want to use it for any reason), you can get popcount of an int using decbin() and substr_count().
<?php
$int1 = 133;
$bin1 = decbin($int1); // "10000101"
echo substr_count($bin1, "1");
// Result: 3
?>

Being a string-comparison this is far less efficient than gmp_popcount() (for which there is a dedicated instruction on most if not all modern processors), but may be handy if gmp is unavailable, or in non-performance-critical code that doesn't otherwise need it.
+add a note

AltStyle によって変換されたページ (->オリジナル) /