理解〜操作员

时间:2015-06-09 08:49:00

标签: operators bit-manipulation

我正在学习Bitwise运算符,为此我在tutsplus上提取了article。好吧,它编写得非常好。我可以理解&|运算符,但~正在弄乱。例如,正如文章中所述:

  

事实上,就像!将布尔值从true翻转为false,反之亦然,   〜运算符将整数中的每个二进制数字反转:从0到1   和1到0。

本文假设操作系统将整数存储为1 byte8 bits。我跟着它。我正在使用PHP进行实验。代码如下:

$b = 12;
$NOR = ~$b;

/*
* ------------------------
* | $b | 0 0 0 0 1 1 0 0 | = 12
* ------------------------
* |  ~ | 1 1 1 1 0 0 1 1 | = 243 as 1 + 2 + 16 + 32 + 64 + 128 = 243
* ------------------------
* Each digit will be inverted.
*/

echobr($NOR);

即使我们认为$b存储为32 bit。然后反转值应为> 243。相反,它返回-13echobr()是我定义的函数。

如果可以解释,那将非常有帮助。

1 个答案:

答案 0 :(得分:3)

$ b = 0000 0000 0000 0000 0000 0000 0000 1100

〜$ b = 1111 1111 1111 1111 1111 1111 1111 0011 = -13

请注意,PHP使用two's complement表示,这意味着最重要的位是符号位,此处“1”表示“ - ”。您可以在此处阅读有关符号位的更多信息Sign bit-Wikipedia

事实上,对于PHP中的任何有符号整数, - $ i ==〜$ i + 1