Heim  >  Artikel  >  Backend-Entwicklung  >  异或运算推导, 交换数据

异或运算推导, 交换数据

WBOY
WBOYOriginal
2016-08-08 09:20:431957Durchsuche

/*
 * 5 0101
 * 9 1010
 *
 * 5 ^ 5
 * 0101
 * 0101
 * -----
 * 0000
 * 得出第一个规律: 相同的数进行异或, 结果是0
 *
 * 9 ^ 5 ^ 6
 * 1010
 * 0101
 * ----
 * 1111
 *
 * 1111
 * 0110
 * ----
 * 1001
 *
 * 9 ^ 6 ^ 5
 * 1010
 * 0110
 * -----
 * 1100
 *
 * 1100
 * 0101
 * -----
 * 1001
 * 得到第二个规律: 异或的顺序是可以交换的
 *
 * 1001
 * 0000
 * ----
 * 1001
 *
 * 0101
 * 0000
 * ----
 * 0101
 * 得到第三个规律: 任何数和0异或, 结果是本身
 */

//规律1, 相同的数进行异或, 结果是0
//规律2, 异或的顺序可以交换 9 ^ 5 ^ 6 == 9 ^ 6 ^ 5
//规律3, 任何数和0异或, 结果是本身
//推导   a ^ b ^ a = b
//根据2  a ^ b ^ a = a ^ a ^ b
//根据1  a ^ b ^ a = a ^ a ^ b = 0 ^ b
//根据3  a ^ b ^ a = a ^ a ^ b = 0 ^ b = b

echo PHP_EOL;
function swap($a, $b)
{
    $a ^= $b;  //  a = (a ^ b);
    $b ^= $a;  //  b = (a ^ b) ^ b; 结果就是 b = a
    $a ^= $b;  //  a = (a ^ b) ^ (a ^ b ^ b); 两个a合并为0, 两个b合并为0, 最后就剩下b, 结果是 a = b
    echo $a.$b;
}
swap(1, 2);

以上就介绍了异或运算推导, 交换数据,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn