不使用加減乘除做加法


問題描述:設計一個算法,不使用加減乘數運算符號實現加法運算。

分析:這個問題在實際的編程中不會碰到,因為加減乘除是基本的四則運算,其中加法是最根本的運算,因為減法就是加法,只不過是加上加數的相反數而已,

         而乘法,則是將實現了加多次,除法就是減多次,因此只有加法是最核心的運算,可以說計算機只有一種運算就是加法,其他運算是在加法之上定義的

         一個函數操作而已,因此我們總是能夠夠將所有的操作全部轉換為加法操作。

         然而計算機中的運算本質上都是通過位運算實現的,因此這里使用到了位運算。三步即可實現:

        第一步:計算兩個數的對應位,但是不計算進步,主要有四種情況,0+0=0,0+1=1,1+0=1,1+1=0,

                   可以看出這正好對應異或操作。

        第二步:計算兩個數的進位,只有在1+1的情況下才會有進位,這正好對應與運算,計算完之后,每位上的數正好是后一位的進位,

                   這時把結果左移一位即可。

        第三步:把第一步的結果和第二步的結果相加,查看是否有進位,如果有進位重復第一步和第二步,直到沒有進位為止。

 

       具體的Java代碼如下,寫法比較通用,讀者可以很容易的轉化為其他語言實現:

import java.util.*;
public class Main {
    public static int sum(int num1,int num2){
        int s, c;
        do{
            s=num1^num2;
            c=(num1&num2)<<1;
            num1=s;
            num2=c;
        }while(num2!=0);
        return num1;
    }
    public static void main(String[] args) {
        // TODO 自動生成的方法存根
        Scanner scan=new Scanner(System.in);
        System.out.print("請輸入第一個加數:");
         int a=scan.nextInt();
         System.out.print("請輸入第二個加數:");
         int b=scan.nextInt();
         System.out.println(a+"+"+b+"="+sum(a,b));
    }

}

輸出結果為:

請輸入第一個加數:9
請輸入第二個加數:10
9+10=19

              雖然這個題目沒有什么實際價值,但是有助於讀者深刻理解計算機的內部運算結構,以及位運算的功能,

讀者還是需要掌握這種方法的,在有些問題中可能會起到作用。




注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com