异或运算与常用方法示例

&     AND     与
|     OR      或
~     NOT     非
^     XOR     异或

异或运算

有一个为真,但是不同时为真,值为真,否则为假

定理:同一变量与另一变量和其异或值异或等于自身。
用例:可使用于加密算法某一环节或更多环节,使算法更复杂,不易被破解,安全性更高。


例:使用XOR交换两个整数

x=4     100

y=5     101

swap x y

x = x ^ y = 100^101 = 001
y = x ^ y = 001^101 = 100
x = x ^ y = 001^100 = 101

x = 101 1+0+4 = 5
y = 100 0+0+4 = 4


例:位运算操作权限

$i = 1;

$mode = 2|4;     //逻辑或运算,用来为用户增加权限

if ($i&$mode){     //使用逻辑与来判断是否具有某权限
     echo '可执行';
}else{
     echo '不可执行';
}


例:异或可以用来清除数据,两个相同的值做异或运算为0

$dd = 2;

echo $dd^$dd;


例:异或加密

<?php

$a = 135;
$encode = encode($a);
echo $encode, '<br />';     //7

$decode = decode($encode);
echo $decode, '<br />';     //135

function encode($src){
     return $src^128;
}
function decode($key){
     return $key^128;
}

?>

例:使用异或判断两个IP地址是否属于同一子网

<?php 

$a = '192.168.101.102';
$b = '192.168.101.100';
$c = '192.168.100.100';

$mask = '255.255.255.0';

$a_n = ip2long($a);
$b_n = ip2long($b);
$c_n = ip2long($c);

$mask_n = ip2long($mask);

echo $a_n & $mask_n , '<br />';     //-1062705920
echo $b_n & $mask_n , '<br />';     //-1062705920
echo $c_n & $mask_n , '<br />';     //-1062706176

//结论 a 和 b 在同一网段

$mask = '255.255.0.0';
$mask_n = ip2long($mask);

echo $a_n & $mask_n , '<br />';     //-1062731776
echo $b_n & $mask_n , '<br />';     //-1062731776
echo $c_n & $mask_n , '<br />';     //-1062731776

//结论 a b c 都在同一网段

?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值