了解 PHP 和(与号、按位和)运算符

我经常在我的代码中使用,如果它是奇数,则返回true,如果它是偶数,则返回false。($var & 1)$var

但是“&”实际上做了什么呢?


答案 1

&是二进制的。如果您有一个二进制值,并且您具有另一个二进制值,则结果将是两者的按位。例如:andandand

  01101010
& 01011001
= 01001000

最右边的位要么是1(在这种情况下,数字是奇数),要么是0,在这种情况下,数字是偶数。如果数字为 1,则只查看最低有效位,if 检查数字是 1 还是 0。正如其他人所提到的,请查看按位运算符以获取有关其工作原理的信息。&


答案 2

二进制系统的基础两个操作是 OR 和 AND。

OR 表示“如果 A 处于打开状态或 B 处于打开状态”。一个真实的例子是两个并联的开关。如果任一允许电流通过,则电流通过。

AND 表示“如果 A 和 B 都处于打开状态”。实际示例是两个串联的开关。仅当两者都允许电流通过时,电流才会通过。

在计算机中,这些不是物理开关,而是半导体,它们的功能称为逻辑门。它们做与开关相同的事情 - 对电流或无电流做出反应。

当应用于整数时,一个数字中的每个位都与另一个数字中的每个位组合在一起。因此,要了解按位运算符 OR 和 AND,您需要将数字转换为二进制,然后对每对匹配位执行 OR 或 AND 运算。

这就是为什么:

00011011 (odd number)
AND
00000001 (& 1)
== 
00000001 (results in 1)

00011010 (even number)
AND
00000001 (& 1)
==
00000000 (results in 0)

因此,(&1)操作使用AND逻辑将最右边的位与1进行比较。所有其他位实际上都被忽略了,因为任何东西和任何东西都什么都不是。二进制中的偶数也是十进制表示法中的偶数(10 是 2 的倍数)。

二进制系统的其他基本操作包括 NOT 和 XOR。NOT的意思是“如果A是关闭的”,并且是唯一一种只接受一个信号或“参数”而不是两个信号或“参数”的逻辑门形式。XOR 表示“如果 A 或 B 处于打开状态,但不能同时打开两者”。然后是NAND,NOR和NXOR,它们基本上不与AND,OR和XOR组合,即NAND意味着“如果A和B没有同时打开”。

在编程中,操作员

& means AND,
| means OR, 
~ means NOT, and
^ means XOR.

其他的可以通过组合这些来弥补,例如:

~ (a & b) is equivalent to a NAND operation

PHP 特定说明

按位运算符不适用于浮点值,在 PHP 中,浮点值将首先隐式转换为整数。范围之外可以表示为整数的数字将被截断为零 - 也就是说,PHP_INT_MAX上的所有数字在表达式中看起来都是“偶数”)。如果要支持 PHP_INT_MIN/PHP_INT_MAX 以外的号码,则需要 。但是,如果您使用的是64位PHP,则您的整数将具有比浮点数更高的精度。($num & 1)fmod($num, 2)


推荐