可能是重复问题:
这里的 ~ 运算符是什么意思?
PHP(或其他语言)中的位非运算
有人能解释一下 PHP 中的 ~
运算符吗?我知道它是一个 NOT 运算符,但为什么 PHP 会将以下语句转换为变量的负值减一?
$a = 1; echo ~$a // echo -2
$a = 2; echo ~$a // echo -3
$a = 3; echo ~$a // echo -4
可能是重复问题:
这里的 ~ 运算符是什么意思?
PHP(或其他语言)中的位非运算
有人能解释一下 PHP 中的 ~
运算符吗?我知道它是一个 NOT 运算符,但为什么 PHP 会将以下语句转换为变量的负值减一?
$a = 1; echo ~$a // echo -2
$a = 2; echo ~$a // echo -3
$a = 3; echo ~$a // echo -4
这是一个位取反操作。
它将所有的1变成0,将所有的0变成1,因此1变成了-2(二进制表示中为0b111111111110)。
请参阅文档 http://php.net/manual/zh/language.operators.bitwise.php
~
反转数字的所有位。在二进制补码中(请谷歌了解),通过反转所有位然后加1可以实现数学上的取反操作。如果只进行第一步(即:只是反转位),你将得到减去1的加法逆元。