今天在讀《程序員的自我修養》時,第四章講靜態鏈接的開頭,給出的實例程序中,有一個函數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了