1. 程式人生 > >不用加減乘除做加法

不用加減乘除做加法

與運算 int ret 步驟 urn 兩個 加減乘除 plus 要求

題目:寫一個函數,求兩個整數之和,要求在函數體內不得實用+、-、x、%四則運算符。

接下來我們試著把二進制的加法用位運算來替代。第一步不考慮進位對每一位相加。0加0、1加1的結果都為0,0加1、1加0的結果都是1。我們註意到,這和異或的結果是一樣的。對異或而言,0和0、1和1異或的結果是0,而0和1、1和0的異或結果是1.接著考慮第二步進位,對0加0、0加1、1加0而言,都不會產生進位,只有1加1時,會向前產生1個進位。此時我們可以想象成是兩個數先做位與運算,然後再想左移動一位。只有兩個數都是1的時候,位與得到的結果是1,其余都是0.第三步把前兩個步驟的結果相加。第三步相加的過程依然是重復前兩步,直到不產生進位為止。

public
class plus{ public int getPlus(int num1,int num2){ int sum,carry; do{ sum = num1 ^ num2; carry = (num1 & num2)<<1; num1 = sum; num2 = carry; }while(num2!=0); return num1; } public static void main(String[] args){ plus p
= new plus(); int n1 = 5; int n2 = 7; int result = p.getPlus(15,7); System.out.println(result); } }

不用加減乘除做加法