了解PHP&(&符号,按位和)运算符

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

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


&是二进制and 。 如果你有一个二进制值,你and另一个二进制值,那么结果将是按位and两个。 一个例子:

  01101010
& 01011001
= 01001000

最右边的位是1(在这种情况下,数字是奇数),或者是0,在这种情况下,数字是偶数。 如果您& 1的数字,你只能看至少显著位,而如果检查的数量是1或0正如其他人所说,看位运算符的信息他们是如何工作的。


对于二进制系统来说两个基本的操作是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上的所有数字在表达式($num & 1)都会显示为“偶数”)。 如果你想支持PHP_INT_MIN / PHP_INT_MAX之外的数字,你需要使用fmod($num, 2) 。 但是,如果你使用的是64位PHP,那么你的整数比浮点数具有更高的精度。


了解关于按位和PHP的知识也很有趣:

/**
 * Regular
 */
echo (true && true); // 1
echo (true && false); // nothing

echo (true || false); // 1
echo (false || false); // nothing

echo (true xor false); // 1
echo (false xor false); // nothing

/**
 * Bitwise
 */
echo (true & true); // 1
echo (true & false); // 0

echo (true | false); // 1
echo (false | false); // 0

echo (true ^ false); // 1
echo (false ^ false); // 0
链接地址: http://www.djcxy.com/p/1687.html

上一篇: Understanding PHP & (ampersand, bitwise and) operator

下一篇: What does it mean to start a PHP function with an ampersand?