PHP 按位取反 运算符(~) 到底怎么算出来的? $a = 8 $b = ~$a echo $b 结果是 - 9

8的二进制我手动算了一下....2402202108的二进制是1000,(1*2的三次方+0*2的二次方+0*2的一次方+0*2的零次方)=8为什么...运算符(~)后$... 8的 二进制我手动算了一下....
2 4 0
2 2 0
2 1 0
8的二进制是 1000, (1*2的三次方 + 0*2的二次方 + 0*2的一次方+0*2的零次方)= 8
为什么...
运算符( ~ )后 $b的值 变为: -9 呢???
展开
 我来答
yu641150278
推荐于2018-03-15 · TA获得超过1069个赞
知道小有建树答主
回答量:637
采纳率:100%
帮助的人:297万
展开全部
在数值范围内,~a = -(a+1)

8的二进制是1000,补满32位,也就是前面28个0 1000
取反后 28个1 0111
第一位是符号位 1代表负数,剩下的27个1 0111
负数是用补码表示的,补码是原码取反+1,也就是说 27个1 0111 是某个数的补码,那倒推回去,这个数就是补码-1后取反,也就是 27个1 0110取反,得到27个0 1001,也就是9,再加上前面的符号位,得到-9
天街夜雨
2013-01-24 · TA获得超过641个赞
知道小有建树答主
回答量:759
采纳率:0%
帮助的人:663万
展开全部
没错呀 .
<?php
$num = 8;
$format = '%0' . (PHP_INT_SIZE * 8) . 'b';
$bin = sprintf($format, $num);
echo "bin: $bin\n";
$bin = sprintf($format, ~$num);
echo "bin: $bin\n";
?>
输出结果
---------- php53 ----------
bin: 00000000000000000000000000001000
bin: 11111111111111111111111111110111

输出完成 (耗时 0 秒) - 正常终止
~ $num Not(按位非) 将 $num 中为 0 的位设为 1,反之亦然。
不能单拿 1000 来算... 前面还有呢.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式