我需要使用两个函数,一个对复选框的值求和,我将该值放入用于网站搜索页面的众多复选框之一的cookie中。
第二个函数检查是否设置了位,我不知道这个函数应该做什么。我知道它应该做什么,但我没有看到它实际上在函数中做任何事情。
所有值都是 2 的幂,它应该查看总和的数字是否包含 2 的幂。下面是函数:
function isBitSet($power, $decimal)
{
if((pow(2,$power)) & ($decimal))
{
return 1;
}
else
return 0;
}
&
是按位 AND 运算符(不要与 &&
混淆,后者是一个比较运算符)! &
一点一点地比较其左侧的事物和右侧的事物,并且仅为两个输入位都有1
的每个位输出一个1
。我将展示一个例子:
在下面的示例中,顶部数字是 pow(2, $power)
,其中 $power = 3
。它以二进制形式编写,以使其更清晰:将 2 转换为 3 的幂,将二进制1
右移了 3 位。
00001000 <- this is pow(2, 3)
& 01101010 <- this is your $decimal (in binary form)
========
= 00001000
你看?所有输出位均为 0,但两个输入位均为 1 的情况除外。
我们所做的是将pow(2, 3)
用作掩码:它已将每个位清除为 0,除了我们感兴趣的位(位 3)。如果$decimal
包含 2 的特定幂,则该位将为 1,否则将为 0:
$decimal contains that power of 2 -> result will be 00001000
$decimal does not contain that ^2 -> result will be 00000000
由于任何非零整数的计算结果在 PHP 中都true
if
,因此如果设置了该位(即 $decimal
包含 2 的幂),如果未设置该位,则会发生else
(因为&
将导致输出为 00000000
)。
如果您需要澄清任何内容,请发表评论。希望对您有所帮助。