中易网

php中 : ~ 位非运算 是什么意思 ? 如何使用 ? 谢谢大家 !!!

答案:2  悬赏:10  
解决时间 2021-01-16 08:25
  • 提问者网友:咪咪
  • 2021-01-16 03:24
php中 : ~ 位非运算 是什么意思 ? 如何使用 ? 谢谢大家 !!!
最佳答案
  • 二级知识专家网友:蕴藏春秋
  • 2021-01-16 04:45
位运算都要求会二进制转换。
比如 $a=3; $b=~$a; echo $b; 输出结果是-4
求解:3的二进制0011,位非就是每一位取反就是1100,第一位是符号位,0正1负,所以1100就是-100,换成10禁制就是-4了追问$t1=192;
$t2=~$t1;
echo $t2;

为什么 我这样 写的话 得出来 的结果 是 -193 而不是 -31 呢? 按您所说的应该是-31的呀 !
谢谢谢谢谢谢谢谢了!!!!!!!!!1追答说错了,
比如 $a=3; $b=~$a; echo $b; 输出结果是-4
求解:3的二进制0000 0000 0000 0000 0000 0000 000 0011
取反1111 1111 1111 1111 1111 1111 1111 1100
第一位符号位,1是负数,说明这是一个负数,负数是补码表示,给他还原
-1: 111 1111 1111 1111 1111 1111 1111 1001
取反:000 0000 0000 0000 0000 0000 0000 0110
最后就是1000 0000 0000 0000 0000 0000 0000 0110 = -4

发现个有趣的事情,~a=-(a+1)追问啊啊啊 我还是不明白呢 能不能用 192 这个数值举例再算出来呀?

谢谢谢谢谢谢谢谢谢谢谢谢!!!!!!!!!!谢谢了呀!!!!!!!!!!!!!!!!!!!!!!!谢谢谢谢谢谢谢谢!!!!!!!!!追答192换成2进制就是0000 0000 0000 0000 0000 0000 1100 0000(一共32位是因为php里int型长度是32位),位非就是每位取反:1111 1111 1111 1111 1111 1111 0011 1111
第一位是符号位,1表示负数,所以得到的结果是个负数,把1拿出来,后面的
111 1111 1111 1111 1111 1111 0011 1111
在二进制中负数是用补码表示的(不要问我为什么),补码是通过取反1得到(比如1110的补码是0001+1=0010),也就是说后面这个数是一个数的补码,那我们按照补码的算法倒推回去,原码就是补码-1后取反,那么就是111 1111 1111 1111 1111 1111 0011 1110取反,得到
000 0000 0000 0000 00000000 1100 0001 ,等于193,加上前面的符号-,结果就是-193了
全部回答
  • 1楼网友:雾月
  • 2021-01-16 05:08
就是把这个值转换成二进制数,然后每一位都取反
结果和变量的类型(字节、子、双字。。。)有关,也就是说和长度有关
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息