java 不使用 “+,-,*,/” 運算符計算兩個整數的和

    /**
     * 不使用 +,-,* ,/ 計算兩個整數的和
     * */
    public  static void testGetAdd(){
        int a = 5;//101
        int b = 7;//111

        while (b!=0){
            int t = a^b;
            System.out.println("testGetAdd a^b binary="+Integer.toBinaryString(t));
            b = (a&b)<<1;
            System.out.println("testGetAdd (a&b)<<1 binary="+Integer.toBinaryString(b));
            a = t;
        }
        /**
         * 1.這一步是通過'異或運算'計算每一位相加後的值,不算進位。a^b
         * 101^111 即:
         * 101
         * 111
         * ----
         * 010
         * *******************
         * 2.得到進位 a&b<<1
         * 101&111 即:
         * 101
         * 111
         * ---
         * 101
         * 計算出結果是對應位相加後需要進位到高位的值,需要左移動一位,以便加到高位上去
         * 101<<1 = 1010
         * ********************
         * 3.然後把兩個數字再加一起就是'和',但是相加過程還會有進位,於是循環相加過程即第一步與第二步,直到沒有進位
         * (這一步其實就是遞歸的思路,還是兩個數字相加)
         * */

    }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章