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

Php 回调函数返回($var&;1)?,php,bitwise-operators,Php,Bitwise Operators,我已经阅读了PHP手册 但我不明白这一行:return($var&1)有人能解释一下吗?$var&1-是按位和 它检查$var是否为奇数 0 & 0 = 0, 0 & 1 = 0, 1 & 0 = 0, 1 & 1 = 1 因此,第一个回调函数仅在$var为奇数时返回TRUE,第二个回调函数反之亦然(!-为逻辑非)。它使用$var和1执行按位and。由于1只设置了最后一位,$var&1只有在$var中设置了最后一位时才会为真。由于偶数从未设置过最后一位,如果A

我已经阅读了PHP手册


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

$var&1
-是按位和 它检查
$var
是否为奇数

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

因此,第一个回调函数仅在$var为奇数时返回TRUE,第二个回调函数反之亦然(!-为逻辑非)。

它使用$var和1执行按位and。由于1只设置了最后一位,
$var&1
只有在$var中设置了最后一位时才会为真。由于偶数从未设置过最后一位,如果And为真,则数字必须为奇数。

&
是按位的“And”运算符。对于1、3、5(和其他奇数)
$var&1
将产生“1”,对于0、2、4(和其他偶数)-“0”将产生“1”。

是一个和$var

如果$var是十进制4,则它是二进制100。100&1是100,因为最右边的数字是$var中的0,而0&1是0,因此,4是偶数

& 
这是位运算符。它使用
$var
1

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

$var二进制为000110和1的示例

000110 &
     1
------
     0

在这种情况下返回0(false),因此数字是偶数,而函数相应地返回false

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


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

奇数的第0()位设置为
1

           v
0 = 00000000b
1 = 00000001b
2 = 00000010b
3 = 00000011b
           ^
表达式
$var&1
执行$var和1之间的操作(
1=0000000 1b
)。所以 表达式将返回:

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

你知道
&
,但你可能不知道的是
&
是有点明智的

&
运算符在位级别工作,它是按位的。您需要考虑操作数的二进制表示形式

e、 g

710&210=1112&0102=0102=210

例如,表达式
$var&1
用于测试最低有效位是否分别为
1
0
、奇数或偶数

$var&1

010&110=0002&0012=0002=010=false(偶数)

110&110=0012&0012=0012=110=true(奇数)

210&110=0102&0012=0002=010=false(偶数)

310&110=0112&0012=0012=110=true(奇数)

410&210=1002&0012=0002=010=false(偶数)

等等…


我明白这是事实,也是事实。但是($var x&1)如何确定is oddIt是否为AND,除了它作用于单独比较的两个数字的每一位(并返回int),而不是作用于两个数字整体(并返回布尔值)的逻辑AND。@gilzero Picture binary numbers。。0001=1(奇数),0011=3(奇数),0010=2(偶数)。看到模式了吗?如果第一位(最右边)为1,则该数字始终为奇数。因此,比较是检查该位是否为真。。如果它是奇数或偶数。它是算术运算符还是比较运算符?@gilzero-两者都不是。。。。这是一个按位运算符,所以($var&1)将$var与数字1进行比较?
000110 &
     1
------
     0
           v
0 = 00000000b
1 = 00000001b
2 = 00000010b
3 = 00000011b
           ^