10

用位运算中的异或运算

[code lang="php"]
$a = 888;
$b = 999;

echo "交换前:\$a = {$a}; \$b = {$b};";
$b = $a ^ $b;
$a = $a ^ $b;
$b = $a ^ $b;
echo "交换后:\$a = {$a}; \$b = {$b};";
[/code]

此算法能够实现是由异或运算的特点决定的,通过异或运算能够把 $a 和 $b 中不同的位设为 1 。这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。

详细运算过程:
$a = 888;
$b = 999;

没有异或:
$a 的二进制是 1101111000
$b 的二进制是 1111100111

第一次按位异或:$b = $a ^ $b;
1101111000
1111100111
—————–
0010011111

$a 的二进制是 1101111000
$b 的二进制是 0010011111
第二次按位异或:$a = $a ^ $b
0010011111
1101111000
—————–
1111100111

$a 的二进制是 1111100111
$b 的二进制是 0010011111
第三次按位异或:$b = $a ^ $b
1111100111
0010011111
—————–
1101111000

$a 的二进制是 1111100111
$b 的二进制是 1101111000

成功交换变量的值

<!-- JiaThis Button BEGIN --> <style type="text/css"> #ckepop a:hover { color:red; background-color:#0063DC; } </style> <div id="ckepop"> <a href="http://www.jiathis.com/share/" class="jiathis_txt" target="_blank">分享到:</a> <a class="jiathis_button_tqq">腾讯微博</a> <a class="jiathis_button_tsina">新浪微博</a> <a class="jiathis_button_qzone">QQ空间</a> <a class="jiathis_button_hi">百度空间</a> <a class="jiathis_button_kaixin001">开心网</a> <a class="jiathis_button_renren">人人网</a> <a class="jiathis_button_xiaoyou">QQ校友</a> <a href="http://www.jiathis.com/share/?uid=89488" class="jiathis jiathis_txt jtico jtico_jiathis" target="_blank">更多...</a> </div> <script type="text/javascript" src="http://v2.jiathis.com/code/jia.js?uid=89488" charset="utf-8"></script> <!-- JiaThis Button END -->

One Response to “不使用第三方变量交换两个变量的值”

  1. 无忌 Says:

    extract(array(‘b’=>$a,’a'=>$b));
    echo $a,$b;

Leave a Reply