常用技巧 —— 位运算 —— 异或运算实现两个数的交换
生活随笔
收集整理的這篇文章主要介紹了
常用技巧 —— 位运算 —— 异或运算实现两个数的交换
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【概述】
交換變量時(shí),通常是借助一臨時(shí)變量來(lái)賦值實(shí)現(xiàn)
void exchange(int a,int b) {int temp;temp=a;a=b;b=temp; }當(dāng)采用異或運(yùn)算時(shí),實(shí)現(xiàn)兩變量交換無(wú)需借助第三個(gè)臨時(shí)變量
void exchange(int &a, int &b) {a ^= b;b ^= a;a ^= b; }【異或運(yùn)算性質(zhì)】
其實(shí)現(xiàn)基于異或運(yùn)算的如下性質(zhì):
【實(shí)現(xiàn)過(guò)程分析】
第一步:a = a ^ b;
? ? 完成后,a 的值為:a ^ b
第二步:b = a ^ b;
? ? a?的值是?a?^ b,執(zhí)行后,得到 b=(a ^ b) ^ b=a ^ (b ^ b)=a ^ 0=a
? ? 即運(yùn)算后 b 的值為 a
第三步:a = a ^ b;
? ? 此時(shí) a 的值仍然是 a ^ b,b 的值為 a,執(zhí)行后,得到 a=(a ^ b) ^ a=a ^ a^ b=0 ^ b=b
? ? 即運(yùn)算后 a 的值為 b
【注意事項(xiàng)】
進(jìn)行交換時(shí),如果 a、b 兩變量的值相等,則會(huì)使得 &a、&b 指向同一地址,從而引發(fā)錯(cuò)誤,因此需要判斷兩數(shù)是否相等。
void exchange(int &a, int &b) {if(a!=b){a ^= b;b ^= a;a ^= b;} }?
總結(jié)
以上是生活随笔為你收集整理的常用技巧 —— 位运算 —— 异或运算实现两个数的交换的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 进制转换(洛谷-P1017)
- 下一篇: 鸣人的影分身(信息学奥赛一本通-T130