6

谁能告诉下面代码的内部过程

<? $temp = 0; echo ~$temp; ?> 
   //instead of 1 it displays -1
4

3 回答 3

4
echo ~$temp;
     ^bitwise not operator

假设 32 位,按位0000FFFF(All 1's) -1,在有符号整数的情况下是 。


另一种看待它的方式~所做的是给你 (一个补码)

为了得到一个数字的负数,你取 2 的补码,这就是 1's complement + 1

所以,

(1's complement of 0) + 1 = 0 //negative 0 is 0
hence, 1's complement of 0 = -1
于 2012-11-01T11:45:36.933 回答
1

按位非 (~):

这会反转其操作数的每一位。如果操作数是浮点值,则在计算之前将其截断为整数。如果操作数介于 0 和 4294967295 (0xffffffff) 之间,它将被视为无符号 32 位值。否则,将其视为带符号的 64 位值

这是因为您实际上是在使用 NOT 处理完整的 32 位无符号整数。这意味着你不是简单地反转 0001 而是反转 00000000000000000000000000000001

变成 1111111111111111111111111111110

本质上这是数字 + 1 并被否定。所以 1 变为 -(num+1) 即 -1 或 1111111111111111111111111111110 二进制(无符号)

例如:- $temp=1;回声~$temp; 打印 -2 //-(n++)

于 2012-11-01T12:57:42.553 回答
0

因为~0-1

~运算符还原0.

关系是:-$temp === ~$temp + 1

于 2012-11-01T11:45:54.390 回答