驚歎,交換操作竟然可以不借助第三個中間數

今天在讀《程序員的自我修養》時,第四章講靜態鏈接的開頭,給出的實例程序中,有一個函數swap函數這樣寫的:

void swap(int * a, int* b){

       *a ^= *b ^= *a ^= *b;

}

歎爲觀止啊,我們通常想,先把a=b賦值,如果不借助第三方數,此時剩餘信息已經只是關於原先的b的信息了,而上述代碼則相當於:

a = a' # b', b = (a' # b') # b' = a', a =( (a' # b') # b' )  # (a' # b') = b' ,這裏#表示異或操作,也就是二進制加, a',b'分別表示原始的數值

多讀好書,收益匪淺啊~

 

補充:今天才發現,這其中是有限制的,就是a和b不能相等的。。。,否則就是賦值0了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章