异或运算与常用方法示例

&     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;


例:异或加密


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

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

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

?>

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


$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 , '
';     //-1062705920
echo $b_n & $mask_n , '
';     //-1062705920
echo $c_n & $mask_n , '
';     //-1062706176

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

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

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

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

?>

你可能感兴趣的:(PHP,计算机基础)