gmp_popcount

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

gmp_popcount人口统计

描述

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

获取人口统计。

参数

num

一个 GMP 对象,一个 int 或一个数值型 string

返回值

num 的人口统计,作为 int

示例

示例 #1 gmp_popcount() 示例

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

上面的示例将输出

3
7

添加备注

用户贡献的备注 2 个备注

0
ketrab2004
2 年前
当您没有 gmp 扩展时,另一种获取人口统计的方法是使用按位运算

<?php

$int
= 133; // 10000101

for($count = 0; $int != 0; $count++) // 重复,直到 $int 为 0(并在 $count 中计算它所采取的步骤数量)
{
$int = $int & $int-1; // 使用按位与运算符从 $int 中移除最右边的 1
}

echo
$count; // 3

?>

这是 Kernighan 的人口统计。

https://youtu.be/ZRNO-ewsNcQ?t=510 对其工作原理有很好的解释
0
phpmanual at headbank dot co dot uk
5 年前
如果您没有启用 gmp 扩展(或者出于任何原因不想使用它),您可以使用 decbin() 和 substr_count() 获取 int 的人口统计。

<?php
$int1
= 133;
$bin1 = decbin($int1); // "10000101"
echo substr_count($bin1, "1");

// 结果:3
?>

作为字符串比较,这远不如 gmp_popcount() 效率高(后者在大多数(如果不是所有)现代处理器上都有专门的指令),但如果 gmp 不可用,或者在不需要性能的代码中,这可能很方便。
To Top