详解php 中的位运算符
php中的位运算符如下表
例子 | 名称 | 结果 |
---|---|---|
$a & $b |
And(按位与) | 将把和中都为 1 的位设为 1。 |
$a | $b |
Or(按位或) | 将把和中任何一个为 1 的位设为 1。 |
$a ^ $b |
Xor(按位异或) | 将把和中一个为 1 另一个为 0 的位设为 1。 |
~ $a |
Not(按位取反) | 将中为 0 的位设为 1,反之亦然。 |
$a << $b |
Shift left(左移) | 将中的位向左移动次(每一次移动都表示“乘以 2”)。 |
$a >> $b |
Shift right(右移) | 将中的位向右移动次(每一次移动都表示“除以 2”)。 |
位移在 PHP 中是数学运算。向任何方向移出去的位都被丢弃。左移时右侧以零填充,符号位被移走意味着正负号不被保留。右移时左侧以符号位填充,意味着正负号被保留。
要注意数据类型的转换。如果左右参数都是字符串,则位运算符将对字符的 ASCII 值进行操作。
PHP 的 ini 设定 error_reporting 使用了按位的值,
提供了关闭某个位的真实例子。要显示除了提示级别
之外的所有错误,php.ini 中是这样用的: E_ALL & ~E_NOTICE
常见四个位运算符:&(按位与),|(按位或),^(按位异或),~(按位取反)
&(按位与):对应位同时为1时,在&运算后则为1,否则为0
|(按位或):对应位有一个为1时,在|运算后则为1,同为0时则为0
^(按位异或):对应位不同时为1时,在^运算后为1,同时为0时则为0,同时为1时^运算后也是0
~(按位取反):$a+(~$a)=-1
在计算机中,负数以其正值的补码形式表达。
在这里我们就要知道三个概念了,原码,反码和补码。
原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。
8的原码为:0000 0000 0000 0000 0000 0000 0000 1000
反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。取反操作指:1变0, 0变1。
8按位取反:1111 1111 1111 1111 1111 1111 1111 0111
补码:反码加1称为补码。也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。
正数的补码与其原码相同;负数的补码是在其反码的末位加1
反码加1:1000 0000 0000 0000 0000 0000 000 1001;这样就得负数的正值的补码形式。也就是-9了。
示例
<?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
以上就是详解php 中的位运算符的详细内容,更多请关注其它相关文章!
推荐阅读
-
Centos7安装PHP及Nginx的教程详解
-
详解nodejs中exports和module.exports的区别
-
PHP中限制IP段访问、禁止IP提交表单的代码
-
PHP中调用ASP.NET的WebService的代码
-
php中利用post传递字符串重定向的实现代码
-
php中http与https跨域共享session的解决方法
-
详解Vue文档中几个易忽视部分的剖析
-
PHP5.2中date()函数显示时间与北京时间相差8小时的解决办法
-
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
-
php数组转换js数组操作及json_encode的用法详解