我需要使用两个函数,一个将复选框的值相加,然后将该值放入一个cookie中,用于网站上搜索页面的许多复选框之一。
第二个函数检查该位是否已设置且我不知道该函数应该做什么。我知道它应该做什么,但我没有看到它实际上在功能中做了什么。
所有值都是2的幂,它应该看看总和数是否包含2的幂。以下是功能:
function isBitSet($power, $decimal)
{
if((pow(2,$power)) & ($decimal))
{
return 1;
}
else
return 0;
}
答案 0 :(得分:0)
&
是按位AND运算符(不要与&&
混淆,后者是比较运算符)! &
比较左边的东西和右边的东西,一点一点,只为每个位输出1
,其中BOTH输入位有1
。我将展示一个例子:
在以下示例中,最高编号为pow(2, $power)
,其中$power = 3
。它以二进制形式编写,以使其更清晰:以2的幂为2,将二进制1
右移3个位置。
00001000 <- this is pow(2, 3)
& 01101010 <- this is your $decimal (in binary form)
========
= 00001000
你知道吗?除非BOTH输入位为1,否则所有输出位均为0。
我们所做的是我们使用pow(2, 3)
作为MASK:除了我们感兴趣的那个(第3位)之外,它已经将每个位清除为0。如果$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
包含2的幂),$decimal
将会出现,并且{{如果未设置该位,则会发生1}}(因为else
将导致输出&
)。
如果您需要澄清,请发表评论。希望它有所帮助。