回调函数返回return($ var& 1)?

时间:2011-06-01 12:28:13

标签: php bitwise-operators

我已阅读有关array_filter

的PHP Manuel
<?php
function odd($var)
{
    // returns whether the input integer is odd
    return($var & 1);
}

function even($var)
{
    // returns whether the input integer is even
    return(!($var & 1));
}

$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);

echo "Odd :\n";
print_r(array_filter($array1, "odd"));
echo "Even:\n";
print_r(array_filter($array2, "even"));
?>

即使我在这里看到结果:

Odd :
Array
(
    [a] => 1
    [c] => 3
    [e] => 5
)
Even:
Array
(
    [0] => 6
    [2] => 8
    [4] => 10
    [6] => 12
)

但是我不明白这一行:return($var & 1);有人能解释一下这个吗?

8 个答案:

答案 0 :(得分:4)

您知道&&AND,但您可能不知道的是&按位 AND。< / p>

&运算符在位级别工作,它是按位的。您需要根据操作数的二进制表示来思考。

e.g。

  

710 & 210 = 1112 & 0102 = 0102 = 210

例如,表达式$var & 1用于测试最低有效位是1还是0,奇数还是偶数。

  

$var & 1

     

010 & 110 = 0002 & 0012 = 0002 = 010 = false (even)

     

110 & 110 = 0012 & 0012 = 0012 = 110 = true  (odd)

     

210 & 110 = 0102 & 0012 = 0002 = 010 = false (even)

     

310 & 110 = 0112 & 0012 = 0012 = 110 = true  (odd)

     

410 & 210 = 1002 & 0012 = 0002 = 010 = false (even)

     

and so on...

答案 1 :(得分:3)

& 

它是按位运算符。它使用$var1

的相应位进行AND

基本上它会测试$ var的最后一位,看看数字是偶数还是奇数

$ var二进制为000110和1

的示例
000110 &
     1
------
     0
返回

0(false),因此数字是偶数,并且函数返回false

答案 2 :(得分:2)

$var & 1 - 是按位AND 它检查$var是否为ODD值

0 & 0 = 0,
0 & 1 = 0,
1 & 0 = 0,
1 & 1 = 1 

所以,只有当$ var是ODD时,第一个回调函数才返回TRUE,第二个 - 反之亦然(! - 是逻辑NOT)。

答案 3 :(得分:2)

它使用$ var和1执行按位AND。由于1仅设置了最后一位,因此$var & 1仅在$ var中设置最后一位时才为真。由于偶数数字从不设置最后一位,如果AND为真,则数字必须为奇数。

答案 4 :(得分:1)

&是按位“和”运算符。使用1,3,5(和其他奇数)$var & 1将导致“1”,其中0,2,4(和其他偶数) - 在“0”中。

答案 5 :(得分:1)

奇数的第零(least significant)位设置为1

           v
0 = 00000000b
1 = 00000001b
2 = 00000010b
3 = 00000011b
           ^

表达式$var & 1在$ var和1(1 = 00000001b)之间执行bitwise AND操作。所以 表达式将返回:

  • 1当$var的第0位设置为1(奇数)
  • 时 当$var的第0位设置为0(偶数)时,
  • 0

答案 6 :(得分:0)

&安培;是$ var。

上的bitwise AND

如果$ var是小数4,那么它是二进制100。100&amp; 1是100,因为最右边的数字是$ var中的0 - 和0&amp; 1为0,因此,4为偶数。

答案 7 :(得分:0)

它返回0或1,具体取决于你的$ var

如果$ var是奇数,例如(1,3,5 ......)$ var&amp; 1返回1,否则(2,4,6)$ var&amp; 1返回0