可能重复:
What does this ~ operator mean here?
Bit not operation in PHP(or any other language probably)
有人可以用PHP解释我的~
运算符吗?我知道它是NOT-operator,但是为什么PHP将以下语句转换为变量的负值减1?
$a = 1; echo ~$a // echo -2
$a = 2; echo ~$a // echo -3
$a = 3; echo ~$a // echo -4
答案 0 :(得分:27)
这称为二进制补码。你可以阅读它in more detail here。
运算符~
是二进制否定运算符(与布尔否定相反),并且它反转其操作数的所有位。结果是二进制补码算法中的负数。
答案 1 :(得分:3)
这是一个按位不是。
它将所有1转换为0,将所有0转换为1。所以1变为-2(二进制表示为0b111111111110)。
看看文档 http://php.net/manual/en/language.operators.bitwise.php
答案 2 :(得分:2)
~
翻转该号码的所有位。在二进制补码(google it)中,通过翻转所有位然后加1.可以实现数学否定。如果你只做第一步(即:只是翻转位),你就得到加法逆减-1。