gmp_popcount

(PHP 4 >= 4.0.4, PHP 5)

gmp_popcountКоличество единиц в двоичной записи числа

Описание

int gmp_popcount ( resource $a )

Возвращает количество единиц в двоичной записи числа.

Список параметров

a

Может быть как числом GMP, так и строкой, при условии, что ее значение можно конвертировать в число.

Возвращаемые значения

Количество единиц в двоичной записи числа a, в виде числа типа integer.

Примеры

Пример #1 Пример использования 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";
?>

Результат выполнения данного примера:

3
7

Коментарии

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.
2018-11-18 17:51:54
http://php5.kiev.ua/manual/ru/function.gmp-popcount.html
Автор:
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
2021-11-14 16:18:33
http://php5.kiev.ua/manual/ru/function.gmp-popcount.html

    Поддержать сайт на родительском проекте КГБ