什么是〜按位运算符(Tilde)的功能

时间:2012-02-03 13:57:19

标签: php operators bit-manipulation tilde

  

可能重复:
  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  

3 个答案:

答案 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。