三 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 -->
九月 30th, 2010 at 13:44:30
extract(array(‘b’=>$a,’a'=>$b));
echo $a,$b;