題目要求:寫一個(gè)函數(shù)锯七,求兩個(gè)整數(shù)之和,要求在函數(shù)體內(nèi)不得使用+荷荤、-缓熟、*、/四則運(yùn)算符號(hào)走诞。
仔細(xì)一看這題頗有意思副女,求兩個(gè)數(shù)之和,而且不讓用運(yùn)算符蚣旱,那么我們就要從二進(jìn)制入手了”現(xiàn)在假設(shè)我們這來(lái)那個(gè)數(shù)分別為12和9,對(duì)應(yīng)的二進(jìn)制為:1100和1001
首先只做加法塞绿,不考慮進(jìn)位問(wèn)題沟涨。結(jié)果為0101。相當(dāng)于做異或運(yùn)算异吻,(1100^1001)=0101
- 接著只考慮進(jìn)位裹赴。只有1+1會(huì)發(fā)生進(jìn)位,所以相當(dāng)于做按位與運(yùn)算诀浪, 得到結(jié)果:(1100&1001)=1000
- 在二進(jìn)制中棋返,1+1會(huì)發(fā)生進(jìn)位。所以對(duì)于第二步的結(jié)果應(yīng)該采用左移1位 1000<< = 10000
重復(fù)上面的步驟雷猪,對(duì)0101和10000進(jìn)行加法運(yùn)算
- 算出異或運(yùn)算0101^10000=10101
- 計(jì)算進(jìn)位睛竣,(按位與運(yùn)算)0101&10000=00000
** 結(jié)果為0,所以10101就是二進(jìn)制加法1100和1001的最后結(jié)果求摇。換算為十進(jìn)制就是21**
用程序語(yǔ)言描述是這個(gè)樣子的:
public int Add(int num1,int num2) {
while (num2!=0) {
int a = num1^num2;
num2 = (num1&num2)<<1;
num1 = a;
}
return num1;
}