汇总复选框并检查是否在php中设置了一个位

时间:2013-11-12 00:45:31

标签: php

我需要使用两个函数,一个将复选框的值相加,然后将该值放入一个cookie中,用于网站上搜索页面的许多复选框之一。

第二个函数检查该位是否已设置且我不知道该函数应该做什么。我知道它应该做什么,但我没有看到它实际上在功能中做了什么。

所有值都是2的幂,它应该看看总和数是否包含2的幂。以下是功能:

function isBitSet($power, $decimal)
{

    if((pow(2,$power)) & ($decimal))
    {       
            return 1;
    }
    else
            return 0;

}

1 个答案:

答案 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将导致输出&)。

如果您需要澄清,请发表评论。希望它有所帮助。