位运算符(&【按位与】,|【按位或】,^按位异或,~【按位取反】,<<【向左移动】,>>【向右移动】)

位运算

在这里,将小结一下位运算符的运算,废话就不这么多了

位运算符有按位与(&),按位或(|),按位异或(^),按位取反(~),向左移动(<<),向右移动(>>)

现在给出两个变量,$m=8,$n=12;问:$mn=$m&$n;  echo $mn;

那么输出结果是多少呢?答案是8,你是否算到了?老鸟就飘过啊,咳咳……

接下来,见证奇迹的时刻哈!

标题是位运算,当然就是要根据位来进行运算了,

 $m=8;在计算机中存储为二进制(1000);

$n=12;在计算机中存储为(1100);

那么按位与运算(两者为1时才为真,1)        1000&1100==>1000,将所得的二进制数转化为十进制就是8啦,同理啦,按位或(只要有一个为1就是真),得到的是12,

按位取异或(两者不同是就是真,1^0或0^1为真,1)呢,一样的,1000^1100==>0100,答案为4;

接下来,才是精彩小亮点,$mn=~$m;echo $mn;那么答案是多少呢?【按位取反 二进制位是1,变成0,是0的 ,变成1 】

你算得是7吗?嗯,恭喜你了,你算错了,答案是 -9 呢,不信你试一试!

为什么呢?  想明白这个,我们要知道数据在内存中存放,同时二进制是以补码的形式在内存中存放的,另外,正数补码、反码都是本身,

在二进制中存储每个数都有一个符号位,如$m=8;就是01000,第一个0代表符号位,0代表正,1代表负,

求解步骤:(以$m=8为例)

1.将要求的数$m=8正常取反(0变成1,1变成0)得10111

2.由第1步得到的二进制数减去1,得到10110,

3.符号位不变,别的位取反,得到11001,

4.转换为十进制,即~$m==>-9;

向左移动,向右移动,就是比较简单的,

如$m=8; $mn=$m>>2;echo $mn;

意思是$m向右移动2位,即1000向右移动两位,得到10也就是十进制的 2 了,

$m=8; $mn=$m>>4; echo $mn;又是多少呢?

是0;

另外,左移运算就是移动一位,末尾补上一个0,故$m<<2;

值为32;就是这么简单,就到这吧,个人认为笔试的时候比较有可能拿取反运算来坑人大笑












  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值