27

可能重复:
这个 ~ 运算符在这里是什么意思?
在 PHP(或任何其他语言可能)中位不操作

有人可以解释一下~PHP 中的运算符吗?我知道它是一个NOT-operator,但为什么 PHP 将以下语句转换为变量的负值减一?

$a = 1; echo ~$a    // echo -2
$a = 2; echo ~$a    // echo -3
$a = 3; echo ~$a    // echo -4  
4

3 回答 3

32

这称为二进制补码算术您可以在此处更详细地了解它。

该运算符~是二元否定运算符(与布尔否定相反),因此,它反转其操作数的所有位。结果是二进制补码算术中的负数。

于 2012-02-03T14:01:26.127 回答
6

这是一个按位NOT。

它将所有 1 转换为 0,将所有 0 转换为 1。所以 1 变为 -2(二进制表示为 0b111111111110)。

看看文档 http://php.net/manual/en/language.operators.bitwise.php

于 2012-02-03T14:00:42.073 回答
4

~翻转数字的所有位。在二进制补码(google it)中,可以通过翻转所有位然后加 1 来实现数学否定。如果您只执行第一步(即:仅翻转位),您将得到加法逆负 1。

于 2012-02-03T14:00:44.833 回答