这个 ~ 运算符在这里是啥意思?
Posted
技术标签:
【中文标题】这个 ~ 运算符在这里是啥意思?【英文标题】:What does this ~ operator mean here?这个 ~ 运算符在这里是什么意思? 【发布时间】:2010-12-30 08:32:24 【问题描述】:例子:
set_error_handler(array($this, 'handleError'), E_ALL & ~E_STRICT & ~E_WARNING & ~E_NOTICE);
这是什么意思?
【问题讨论】:
【参考方案1】:它是bitwise not operator(也称为“补码”)。也就是说~ $a
中设置的位是$a
中没有设置的位。
那么
E_ALL & ~E_STRICT & ~E_WARNING & ~E_NOTICE
是在E_ALL
中设置的位以及在E_STRICT
、E_WARNING
和E_NOTICE
中未设置的位。这基本上说明了除了严格、警告和通知错误之外的所有错误。
【讨论】:
【参考方案2】:这是bitwise-not operator。例如,二进制表示01011110
的数字的按位否定将是10100001
;每一位都翻转到相反的位置。
【讨论】:
虽然这是技术解释,但除非您意识到E_STRICT
、E_WARNING
、E_NOTICE
等,否则该解释无济于事。人。是整数,同时与&
位运算符组合。【参考方案3】:
按位(&、|、~)和非按位(&&、||、!)运算符之间的区别在于,按位应用于整数中的所有位,而非按位将整数视为单个“真”(非零)或“假”(零)值。
比如说,$flag_1 = 00000001
和 $flag_2 = 00000010
。对于非按位运算,两者都为“真”($flag_1 && $flag_2
为“真”),而$flag_1 & $flag_2
的结果为 00000000,$flag_1 | $flag_2
的结果为 00000011。~$flag_2
为 11111101,当对运行结果进行按位与运算时,将清除该位位置(xxxxxx0x)。 $flag_2
对运行结果进行按位或运算将设置该位位置 (xxxxxx1x)。
【讨论】:
【参考方案4】:参见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
这意味着~
运算符为输入中等于1
的每个位提供了一个0
位——反之亦然,
【讨论】:
【参考方案5】:这是not
按位 运算符。在此处阅读按位运算符:
http://php.net/manual/en/language.operators.bitwise.php
【讨论】:
以上是关于这个 ~ 运算符在这里是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章