這裏是一個程序,交換兩個號碼使用臨時變量,並在使用移位操作:ç交換實現在移位
#include <stdio.h>
#include <conio.h>
int main(void)
{
int a,b,i,j;
clrscr();
printf(「Enter two integers: 「);
scanf(「%d%d」,&a,&b);
printf(「a=%d,b=%d\n」,a,b);
for(i = 0; i < 16; i++)
{
if((a & (1 << i))^(b & (1 << i)))
{
a = a^(1 << i);
b = b^(1 << i);
}
}
printf(「a=%d,b=%d」,a,b);
getch();
return 0;
}
我的問題是什麼是1的意義在這個計劃? 我知道異或那的工作原理如下
a = a^b;
b = a^b;
a = a^b;
的方法,但我不知道如何通過上述程序的作品?
請不要實際交換類似的東西(甚至是3行xor版本)。無論如何,1 << x與'1'是一樣的,後面是二進制的'x'' 0,所以它只是利用它(我相信它每次交換一次)。 – Corbin 2012-07-18 09:27:24
這真的是效率低下,是我見過的最糟糕的「swap」實現,此外,如果「int」只發生16位寬,它就會發生整數溢出。你從哪裏得到這個殘餘物? – 2012-07-18 09:49:35
對於像上面的'xor'這樣的每個速記/智能alec編程技巧,一隻小貓會被殺死!而一個必須閱讀的程序員將追逐並追捕責任人! – t0mm13b 2012-07-18 20:15:15