这个〜运算符在这里意味着什么?

时间:2009-12-27 23:18:52

标签: php

示例:

set_error_handler(array($this, 'handleError'), E_ALL & ~E_STRICT & ~E_WARNING & ~E_NOTICE);

这意味着什么?

5 个答案:

答案 0 :(得分:21)

这是bitwise not operator(也称为“补充”)。也就是说~ $a中设置的位是未在$a中设置的位。

那么

E_ALL & ~E_STRICT & ~E_WARNING & ~E_NOTICE

E_ALL中设置的位以及E_STRICTE_WARNINGE_NOTICE中未设置的位。这基本上表示除严格,警告和通知错误之外的所有错误。

答案 1 :(得分:16)

这是bitwise-not operator。例如,具有二进制表示01011110的数字的按位否定将是10100001;每一位都被翻转到相反的位置。

答案 2 :(得分:6)

按位(&,|,〜)和非按位(&&,||,!)运算符之间的区别在于,在整数的所有位中应用按位而非按位将整数视为单个" true" (非零)或"假" (零)值。

说,$flag_1 = 00000001$flag_2 = 00000010。两者都是" true"对于非按位运算,($flag_1 && $flag_2是" true"),而$flag_1 & $flag_2的结果为00000000,$flag_1 | $flag_2的结果为00000011。{{ 1}}将是11111101,当按位与运行结果进行AND运算时清除该位的位置(xxxxxx0x)。 ~$flag_2对运行结果进行按位运算将设置该位位置(xxxxxx1x)。

答案 3 :(得分:1)

请参阅Bitwise Operators:这是“非”运营商(引用)

  

~ $a   
$a中设置的位是   没有设定,反之亦然。


这意味着,从你发布的内容中汲取灵感,这段代码:

var_dump(decbin(E_STRICT));
var_dump(decbin(~E_STRICT));

会得到这个输出:

string '100000000000' (length=12)
string '11111111111111111111011111111111' (length=32)

(在第一行的左侧添加几个0用于填充,你会看到我的意思)


从第二个输出中删除填充,您得到:

100000000000
011111111111

这意味着~运算符为每个位赋予0位,该位在输入中等于1 - 反之亦然,

答案 4 :(得分:1)

这是not 按位运算符。在这里阅读有关位运算符的信息:

http://php.net/manual/en/language.operators.bitwise.php