gmp_popcount

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

gmp_popcountPopulation count

Descrierea

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

Get the population count.

Parametri

num

Un număr GMP sub formă de resource în PHP 5.5 și anterior, un obiect GMP în PHP 5.6 și ultrior, su un șir de caractere numeric atunci când acesta poate fi convertit într-un număr.

Valorile întoarse

The population count of num, as an int.

Exemple

Example #1 gmp_popcount() example

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

Exemplul de mai sus va afișa:

3
7

add a note add a note

User Contributed Notes 2 notes

up
0
ketrab2004
2 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
5 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.
To Top