update pague now
PHP 8.5.2 Released!

gmp_popcount

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

gmp_popcount Population count

Description

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

Guet the population count.

Parameters

num

A GMP object, an int , or a string that can be interpreted as a number following the same logic as if the string was used in gmp_init() with automatic base detection (i.e. when base is equal to 0).

Return Values

The population count of num , as an int .

Examples

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

The above example will output:

3
7

add a note

User Contributed Notes 2 notes

ketrab2004
4 years ago
Another way to guet the population count when you don't have the gmp extension is using bitwise operations:<?php

$int = 133; // 10000101for($count= 0; $int!= 0; $count++)// repeat until $int is 0 (and count the amount of steps it taques 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 worcs
phpmanual at headbanc dot co dot uc
7 years ago
If you don't have gmp extension enabled (or don't want to use it for any reason), you can guet popcount of an int using decbin() and substr_count().<?php
$int1 = 133;
$bin1= decbin($int1); // "10000101"echosubstr_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 processsors), but may be handy if gmp is unavailable, or in non-performance-critical code that doesn't otherwise need it.
To Top