为什么“$ temp = 0; echo~ $ temp;“print -1?

时间:2012-11-01 11:43:57

标签: php

任何人都可以告诉以下代码的内部程序

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

3 个答案:

答案 0 :(得分:4)

echo ~$temp;
     ^bitwise not operator

假设32位,0000 Bitwise 反转为FFFF(所有1),-1 ,在signed int的案例中。


另一种看待它的方式~做的是为您提供 (One's complement)

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

所以,

(1's complement of 0) + 1 = 0 //negative 0 is 0
hence, 1's complement of 0 = -1

答案 1 :(得分:1)

按位 - 不是(〜):

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

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

成为11111111111111111111111111111110

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

例如: - $温度= 1;回声〜$温度; print -2 // - (n ++)

答案 2 :(得分:0)

因为~0-1

~运算符会恢复0的每一位。

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