博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php 位移运算符(&,|,^,~)
阅读量:6898 次
发布时间:2019-06-27

本文共 1143 字,大约阅读时间需要 3 分钟。

hot3.png

位运算符
& 位与运算
运算规则:位与运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑与运算。例如:int型常量4和 7进行位与运算的运算过程如下:
4 = 0000 0000 0000 0100
&
7 = 0000 0000 0000 0111
=   0000 0000 0000 0100
对于负数,按其补码进行运算。例如:例如:int型常量-4和7进行位与运算的运算过程如下:
-4=1111 1111 1111 1100
&
7 = 0000 0000 0000 0111
=   0000 0000 0000 0100
    
| 位或运算
运算规则:位或运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑或运算。例如:int型常量5和 7进行位或运算的表达式为5|7,结果如下:
?5= 0000 0000 0000 0101
|
7= 0000 0000 0000 0111
 =?0000 0000 0000 0111
^ 位异或
运算规则:位异或运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑异或运算。只有当对应位的二进 制数互斥的时候,对应位的结果才为真。
例如:int型常量5和7进行位异或运算的表达式为5^7,结果如下:
5=
0000 0000 0000 0101
^
7=
0000 0000 0000 0111
=
0000 0000 0000 0010
典型应用:
数值交换
数值交换。例如a=10,b=15。在例1中,无须引入第三个变量,利用位运算即可实现数据交换。
例1 编程实现两个数据的交换。
$a=10;//1010
$b=15;//1111
printf("\na=%d,b=%d",$a,$b);
$a=$a^$b;//1010 ^ 1111;$a = 0101
printf("\n%%a = '%b'",$a);
$b=$a^$b;//0101 ^ 1111;$b = 1010;
printf("\n%%b = '%b'",$b);
$a=$a^$b;//0101 ^ 1010;$a = 1111;
printf("\na=%d,b=%d",$a,$b);
a=10,b=15
%a = '0101'
%b = '1010'
a=15,b=10    
~ 位非
运算规则:位非运算的实质是将参与运算的两个数据,按对应的二进制数逐位进行逻辑非运算。例如:对int型常量7 进行位非运算的表达式为~7,结果为2,计算过程如下:
~?7=0000 0000 0000 0111
=?0000 0000 0000 0010

转载于:https://my.oschina.net/u/435872/blog/134823

你可能感兴趣的文章
一些收集的MikroTik RouterOS破解版虚拟机VMware
查看>>
wordpress无法更新为最新版本
查看>>
爬虫代码编写中会遇到的字符处理的坑
查看>>
SSM-Spring-09:Spring中jdk动态代理
查看>>
我为NET狂官方面试题-数据库篇
查看>>
HBase集群安装
查看>>
Ubuntu终端字体大小设置快捷键
查看>>
[20180625]函数与标量子查询13(补充)
查看>>
Python面试问题整理(附答案)
查看>>
设计模式—装饰模式的C++实现
查看>>
MySQL:Innodb page clean 线程 (二) 解析
查看>>
Android CircularFloatingActionMenu:作为系统级按钮悬浮桌面弹出菜单使用(3)
查看>>
正确配置Kubelet可一定程度防止K8S集群雪崩
查看>>
Content Aware ABR技术
查看>>
Spring系列之Spring框架和SpringAOP集成过程分析(十一)
查看>>
云数据库产品月刊·5月刊
查看>>
50行代码的MVVM,感受闭包的艺术
查看>>
Android第三方开源图片裁剪截取:cropper
查看>>
直播转点播实践
查看>>
基于Java语言构建区块链(二)—— 工作量证明
查看>>