E_ALL ^ E_NOTICE和E_ALL & ~E_NOTICE有什么区别?
据我所知,它们都排除了E_NOTICE级别的错误报告。但是在PHP.ini中使用的是表单&~,而我在很多地方都提到了表单^。
发布于 2014-03-05 21:24:51
^和&~是有区别的,但在这种情况下没有区别。
^的意思是异或,因此在结果中设置了在左操作数或右操作数中设置的位数,但不能同时设置这两个操作数。&~意味着而不是,所以在结果中设置在左操作数中而不是在右边操作数中的位。
如果我们看一下以下数字,就会有不同之处:
$a = 0b1010; // decimal 10
$b = 0b0001; // decimal 1$a ^ $b的结果是0b1011 (十进制11),而$a & ~$b则是0b1010 (十进制10)。
然而,E_ALL实际上是0b11111111 (也就是说,所有的位都被设置了;它实际上超过了8位)。因此,XOR实际上与和不相同。
$a = 0b11111111; // decimal 255
$b = 0b00000100; // decimal 4$a ^ $b给出了0b11111011 (小数251),$a & ~$b也给出了。
发布于 2014-03-05 21:21:36
第一个表示法是E_ALL和E_NOTICE之间的XOR。第二种表示法是按位表示的AND,其中有一个负值运算符应用于E_NOTICE。这两个条件在技术上并不等价,因为第一个XOR可以重写为((E_ALL & ~E_NOTICE) | (~E_ALL & E_NOTICE))。
参考资料:php.net/manual/en/language.operators.bitwise.php
编辑完整性:正如Jack和lonesomeday所指出的,由于E_ALL将所有相关位设置为1,所以在特殊情况下,这两个条件是等价的。
https://stackoverflow.com/questions/22209464
复制相似问题