这个 ~ 运算符在这里是啥意思?

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_STRICTE_WARNINGE_NOTICE 中未设置的位。这基本上说明了除了严格、警告和通知错误之外的所有错误。

【讨论】:

【参考方案2】:

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

【讨论】:

虽然这是技术解释,但除非您意识到E_STRICTE_WARNINGE_NOTICE 等,否则该解释无济于事。人。是整数,同时与& 位运算符组合。【参考方案3】:

参见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 位——反之亦然,

【讨论】:

【参考方案4】:

这是not 按位 运算符。在此处阅读按位运算符:

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

【讨论】:

【参考方案5】:

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

比如说,$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)。

【讨论】:

以上是关于这个 ~ 运算符在这里是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

CSS 中的这个运算符 (::) 是啥意思? [复制]

/=/ 在 Netezza 中是啥意思?

这个赋值运算符后面的 & 是啥意思?

>?= 运算符是啥意思?

这个 JavaScript 运算符是啥意思? >>> [重复]

:= 运算符在 mysql 中是啥意思?