逐位运算符-在PHP的split方法中使用两个标志.为什么|而不是&&;


bitwise operators - Using two flags in split method in PHP. Why the | but not the &&?

可能重复:
参考-这个符号在PHP中是什么意思?

我正在努力学习PHP和编程。在我正在学习的书中有这样的内容:$flags=PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE;

$flags用于split((方法。

第一个标志是:如果设置了这个标志,preg_split((将只返回非空片段。第二个是:如果设置了此标志,则会捕获并返回分隔符模式中带括号的表达式。

他为什么不使用&运算符,但|?

你能解释一下|实际上是干什么的吗?

据我所知,这些是

amp&是逻辑AND,而|是按位运算符。

当两个操作数都求值为true时,a && b求值为true。由于标志几乎总是大于1的数字,因此此表达式总是求值为true

接受位掩码的函数如何工作

它们指定常量

注意,这些常数必须具有2:的幂

FLAG_INT1 = 1
FLAG_INT2 = 2
FLAG_INT3 = 4
FLAG_INT4 = 8

您调用组合了一些标志的函数

myFunction(FLAG_INT1 | FLAG_INT3)

这导致位OR运算:

   0001
OR 0100
=======
   0101

一个(或两个(操作数中的一个设置位(1(也将导致结果中的设置位(1(。

该函数在内部检查每个标志

这需要位AND运算:

    0101
AND 0001 // check for FLAG_INT1
========
    0001 // true
    0101
AND 0010 // check for FLAG_INT2
========
    0000 // false
    0101
AND 0100 // check for FLAG_INT3
========
    0100 // true

逐位AND要求两个操作数在位置X都有一个设置位(1(,以便在位置X的结果中产生一个设置位组(2

维基百科也有一篇关于常见比特运算符的好文章:http://en.wikipedia.org/wiki/Bitwise_operation

amp&是逻辑"与"但|是位