php--关于位运算符

常见四个位运算符:&(按位与),|(按位或),^(按位异或),~(按位取反)php

&(按位与):对应位同时为1时,在&运算后则为1,不然为0html

|(按位或):对应位有一个为1时,在|运算后则为1,同为0时则为0spa

^(按位异或):对应位不一样时为1时,在^运算后为1,同时为0时则为0,同时为1时^运算后也是0.net

~(按位取反):$a+(~$a)=-1htm

在计算机中,负数以其正值的补码形式表达。
 在这里咱们就要知道三个概念了,原码,反码和补码。blog

原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。二进制

8的原码为:0000 0000 0000 0000 0000 0000 0000 1000计算机

反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。取反操做指:1变0, 0变1。co

8按位取反:1111 1111 1111 1111 1111 1111 1111 0111位运算

补码:反码加1称为补码。也就是说,要获得一个数的补码,先获得反码,而后将反码加上1,所得数称为补码。

正数的补码与其原码相同;负数的补码是在其反码的末位加1

反码加1:1000 0000 0000 0000 0000 0000 000 1001;这样就得负数的正值的补码形式。也就是-9了。

参考:http://www.cnblogs.com/setsail/archive/2013/05/22/3093542.html

   http://my.oschina.net/WarRome/blog/90707

以上解释本身也没有看的太懂,但实践得出$a+(~$a)=-1

小例以下:

<?php
$m=8;
$n=12;
$p=-109;
$mn=$m&$n;
echo $mn."<br>";
$mn=$m|$n;
echo $mn."<br>";
$mn=$m^$n;
echo $mn."<br>";
$mn=~$m;
echo $mn."<br>";
$mn=~$p;
echo $mn."<br>";
?>

输出结果:

8
12
4
-9
108

关于按位取反的问题,再琢磨琢磨

相关文章
相关标签/搜索