我已阅读有关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);
有人能解释一下这个吗?
答案 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)
&
它是按位运算符。它使用$var
和1
基本上它会测试$ 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操作。所以
表达式将返回:
$var
的第0位设置为1(奇数)$var
的第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