PHP位运算

运算符名称结果
&And(按位与)将把 $a 和 $b 中都为 1 的位设为 1
|Or(按位或)将把 $a 和 $b 中任何一个为 1 的位设为 1
^Xor(按位异或)将把 $a 和 $b 中一个为 1 另一个为 0 的位设为 1
~Not(按位取反)将 $a 中为 0 的位设为 1,反之亦然
<<AShift left(左移)将 $a 中的位向左移动 $b 次(每一次移动都表示“乘以 2”)
>>Shift right(右移)将 $a 中的位向右移动 $b 次(每一次移动都表示“除以 2”)
$a = 3; // 011
$b = 5; // 101

$a & $b = 1; // 011 & 101 = 001
$a = 3; // 011
$b = 5; // 101

$a | $b = 7; // 011 | 101  =  111 
$a = 3; // 011
$b = 5; // 101

$a ^ $b = 6; // 011 | 101  =  110 
//1.二进制的最高位是符号位,0表示正数,1表示负数。
//2.正数的原码,反码,补码都一样。
//3.负数的反码=它的原码符号位不变,其它位取反(0->1,1->0)。
//4.负数的补码=它的反码+1。
//5.0的反码,补码都是0.
//6.在计算机运算的时候,都是以补码的方式来运算的,那么运算完后得到的结果也是某个数的补码

$a = 5; // 101
// 源码:0000 0101 // $a 源码
// 补码:1111 1010 // 第一位是符号位,1代表负号,表示这是一个负数;记住运算和运算结果都是用补码表示的,所以这个时候我们得到的是补码,我们还需要推导反码和原码
// 反码:1111 1001 // 反码=补码-1
// 原码:1000 0110 // 符号位不动,其他取反 ~$a 源码

~ $a = -6;
$a = 3; // 011
$b = 5; // 101

$b << $a = 40; // 5*2*2*2 = 101000
$a = 3; // 011
$b = 16; // 10000

$b >> $a = 2; // 16/2/2/2 = 2
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值