PHP 程序用于计算整数中的位

phpserver side programmingprogramming更新于 2025/8/29 7:22:17

什么是二进制代码?

二进制代码是一种使用二进制数字系统表示信息或数据的系统。它仅使用两位数字(通常为 0 和 1)来表示所有值。二进制代码中的每个数字称为一位(二进制数字的缩写)。

在二进制代码中,每个数字代表 2 的一个幂。从最右边的数字开始,2 的幂从右到左依次增加。例如,在 8 位二进制代码中,最右边的位代表 2^0 (1),下一位代表 2^1 (2),再下一位代表 2^2 (4),依此类推。

示例

我们以十进制数 42 为例,并用二进制代码表示它。要将 42 转换为二进制,我们将其连续除以 2,并跟踪余数,直到商变为零。

以下是分步过程:

步骤 1

42 ÷ 2 = 21,余数 0

步骤 2

21 ÷ 2 = 10,余数 1

步骤 3

10 ÷ 2 = 5,余数 0

步骤 4

5 ÷ 2 = 2,余数 1

步骤 5

2 ÷ 2 = 1,余数 0

步骤 6

1 ÷ 2 = 0,余数 1

为了获得二进制表示,我们从底部(最后余数),并从下到上读取余数。

42 的二进制代码结果为:101010

因此,十进制数 42 的二进制代码表示为 101010。

什么是置位?

在二进制代码中,置位位是指设置为 1 的二进制数字(位)。另一方面,清零位是指设置为 0 的二进制数字。

示例

例如,在二进制代码 101010 中,有三个置位位(对应于值为 1 的位置)和三个清零位(对应于值为 0 的位置)。

用于计算整数中置位位的 PHP 程序

方法 1:循环遍历整数的所有位

示例

<?php
// 用于获取正整数 n 的集合位数的函数
// 二进制表示中的位数
//
function countSetBits($n)
{
	$count = 0;
	while ($n)
	{
		$count += $n & 1;
		$n >>= 1;
	}
	return $count;
}

// 驱动代码
$number= 12;
echo "Number of setbits in $number: " .countSetBits($number);
?>

输出

Number of setbits in 12: 2

方法 2:递归方法

<?php
// PHP 实现的递归方法
// 用于计算正整数 n 的
// 二进制表示中置位位数
// 的个数

// 递归函数
// 用于计算置位位数
function countSetBits($n)
{
	// base case
	if ($n == 0)
		return 0;

	else

		// if last bit set
		// add 1 else add 0
		return ($n & 1) +
				countSetBits($n >> 1);
}

// 驱动代码

// 从用户获取值
$n = 123;

// 函数调用
echo "Number of setbits in $n are: ".countSetBits($n);
?>

输出

Number of setbits in 123 are: 6

结论

总而言之,我们可以使用 PHP 中的递归方法和循环遍历所有位来计算整数中置位(1)的个数。循环方法使用 while 循环遍历整数的每一位。我们初始化一个计数器变量并迭代直到数字变为 0。在循环中,我们使用按位与运算符检查最低有效位。如果等于 1,则增加计数器。然后,我们将数字右移 1 位。此过程持续进行,直到所有位都检查完毕,并返回最终计数。

对于递归方法,我们可以定义一个以整数作为输入的递归函数。在函数中,我们使用按位与运算符检查最低有效位与 1。如果等于 1,则增加计数器。然后,我们将数字右移 1 位,并使用更新后的数字递归调用该函数。基本情况是当数字变为 0 时,我们返回计数器。这种方法以递归方式计算设置的位,直到数字变为 0。这两种方法都提供了计算整数中设置位的方法,允许根据程序员的特定需求和偏好选择不同的实现方式。


相关文章