今天遇到php中二进制的一些位移运算问题,感觉思路有点乱,就索性写下来了。
php中二进制原码,反码,补码知识总结:
① 二进制的最高位是符号位,0表示正数,1表示负数。
② 正数的原码,反码,补码都是本身
③ 负数的反码是符号位不变,其他位置由0变1,由1变0
④ 负数的补码=它的反码+1
⑤ 0的反码,补码均为0
⑥ 在计算机运算中,都是已补码的形式来运算的。
举例子说明:
(1)$a=~2
因为计算机会先把2转化为其补码形式在进行计算,所以先找到2的补码,根据②可知,2的补码为2。即2的补码以二进制的形式表示出来为:
故$a=~2后的结果为-3;这是理论推断,我们用php来验证下:
<?php
$a=(~2);
echo $a;
?>
输出结果为:-3
(2)$a=~(-2);
《由于$a的补码的符号位是0,所以$a是一个正数,根据②可知,$a为1》
php验证代码:
<?php