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

nav*_*een 6 php

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

<? $temp = 0; echo ~$temp; ?> 
   //instead of 1 it displays -1
Run Code Online (Sandbox Code Playgroud)

Ank*_*ena 1

按位非 (~):

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

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

变成 11111111111111111111111111111110

本质上这是数字 + 1 并取负数。所以 1 变成 -(num+1) ,即 -1 或 1111111111111111111111111111110 二进制(无符号)

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