我正在学习Bitwise运算符,为此我在tutsplus上提取了article。好吧,它编写得非常好。我可以理解&
和|
运算符,但~
正在弄乱。例如,正如文章中所述:
事实上,就像!将布尔值从true翻转为false,反之亦然, 〜运算符将整数中的每个二进制数字反转:从0到1 和1到0。
本文假设操作系统将整数存储为1 byte
或8 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
。相反,它返回-13
。 echobr()
是我定义的函数。
如果可以解释,那将非常有帮助。
答案 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