Java程序 不使用算術(shù)運(yùn)算符進(jìn)行兩個數(shù)字的加法含代碼

Java程序 不使用算術(shù)運(yùn)算符進(jìn)行兩個數(shù)字的加法

在日常的Java編程中,很多時候需要進(jìn)行一些數(shù)學(xué)運(yùn)算,而加法運(yùn)算無疑是最常見的一種運(yùn)算。愛掏網(wǎng) - it200.com在使用Java進(jìn)行加法運(yùn)算時,我們通常會使用加法運(yùn)算符“+”,例如:

int a = 1;
int b = 2;
int c = a + b;
System.out.println(c);

輸出結(jié)果為:

3

但如果我們不能使用算術(shù)運(yùn)算符“+”來進(jìn)行加法運(yùn)算,那該怎么辦呢?本文將介紹一些不使用算術(shù)運(yùn)算符的Java程序進(jìn)行兩個數(shù)字的加法的方法。愛掏網(wǎng) - it200.com

在Java程序中,我們可以使用按位異或(^)、按位與(&)和移位運(yùn)算(<<、>>、>>>)來實現(xiàn)加法運(yùn)算,具體實現(xiàn)方式如下:

public int add(int a, int b) {
    while (b != 0) {
        int carry = (a & b) << 1;
        a = a ^ b;
        b = carry;
    }
    return a;
}

以上代碼中,我們用一個while循環(huán)來實現(xiàn)加法運(yùn)算,每次循環(huán)實現(xiàn)一次進(jìn)位和求和操作。愛掏網(wǎng) - it200.com具體步驟如下:

  1. 首先,將a和b進(jìn)行按位與(&),得到進(jìn)位位。愛掏網(wǎng) - it200.com
  2. 將進(jìn)位位左移一位(<< 1),得到實際的進(jìn)位值(carry)。愛掏網(wǎng) - it200.com
  3. 將a和b進(jìn)行按位異或(^),得到?jīng)]有進(jìn)位的值(sum)。愛掏網(wǎng) - it200.com
  4. 將進(jìn)位值(carry)賦值給b,繼續(xù)進(jìn)行循環(huán),直至b為0。愛掏網(wǎng) - it200.com
  5. 最后返回沒有進(jìn)位的值(sum)。愛掏網(wǎng) - it200.com

以上代碼可以通過下面的測試代碼進(jìn)行驗證:

public class Main {
    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        int c = add(a, b);
        System.out.println(c);
    }

    public static int add(int a, int b) {
        while (b != 0) {
            int carry = (a & b) << 1;
            a = a ^ b;
            b = carry;
        }
        return a;
    }
}

輸出結(jié)果為:

3

字符串轉(zhuǎn)數(shù)字實現(xiàn)加法

除了按位異或、按位與、移位運(yùn)算實現(xiàn)加法之外,我們還可以通過字符串轉(zhuǎn)數(shù)字實現(xiàn)加法。愛掏網(wǎng) - it200.com具體實現(xiàn)方式如下:

public int add(String a, String b) {
    BigInteger left = new BigInteger(a);
    BigInteger right = new BigInteger(b);
    BigInteger sum, carry;
    while (right.compareTo(BigInteger.ZERO) != 0) {
        sum = left.xor(right);
        carry = left.and(right).shiftLeft(1);
        left = sum;
        right = carry;
    }
    return left.intValue();
}

以上代碼中,我們首先將字符串a(chǎn)和b轉(zhuǎn)換為BigInteger類型的整數(shù),然后按照按位異或、按位與、移位運(yùn)算的方式實現(xiàn)加法運(yùn)算。愛掏網(wǎng) - it200.com具體步驟如下:

  1. 分別將字符串a(chǎn)和b轉(zhuǎn)換為BigInteger類型的整數(shù)left和right。愛掏網(wǎng) - it200.com
  2. 創(chuàng)建兩個BigInteger類型的變量sum和carry,用于存儲沒有進(jìn)位的值和進(jìn)位的值。愛掏網(wǎng) - it200.com
  3. 進(jìn)行while循環(huán),當(dāng)right不等于0時進(jìn)行循環(huán)。愛掏網(wǎng) - it200.com
  4. 每次循環(huán)將left和right進(jìn)行按位異或(xor),得到?jīng)]有進(jìn)位的值(sum)。愛掏網(wǎng) - it200.com
  5. 再將left和right進(jìn)行按位與(and),然后將結(jié)果左移1位(<< 1),得到進(jìn)位的值(carry)。愛掏網(wǎng) - it200.com
  6. 將沒有進(jìn)位的值(sum)賦值給left,將進(jìn)位的值(carry)賦值給right,繼續(xù)進(jìn)行循環(huán),直至right為0。愛掏網(wǎng) - it200.com
  7. 最后返回left的intValue值(轉(zhuǎn)換為int類型)。愛掏網(wǎng) - it200.com

以上代碼可以通過下面的測試代碼進(jìn)行驗證:

public class Main {
    public static void main(String[] args) {
        String a = "1";
        String b = "2";
        int c = add(a, b);
        System.out.println(c);
    }

    public static int add(String a, String b) {
        BigInteger left = new BigInteger(a);
        BigInteger right = new BigInteger(b);
        BigInteger sum, carry;
        while (right.compareTo(BigInteger.ZERO) != 0) {
            sum = left.xor(right);
            carry = left.and(right).shiftLeft(1);
            left = sum;
            right = carry;
        }
        return left.intValue();
    }
}

輸出結(jié)果為:

3

結(jié)論

本文介紹了不使用算術(shù)運(yùn)算符的Java程序進(jìn)行兩個數(shù)字的加法的實現(xiàn)方法,其中包括按位異或、按位與、移位運(yùn)算實現(xiàn)加法和字符串轉(zhuǎn)數(shù)字實現(xiàn)加法。愛掏網(wǎng) - it200.com雖然這些方法在實現(xiàn)過程中比較復(fù)雜,但是它們可以幫助我們更好地理解加法運(yùn)算的本質(zhì),并提高我們的編程思維能力。愛掏網(wǎng) - it200.com

聲明:所有內(nèi)容來自互聯(lián)網(wǎng)搜索結(jié)果,不保證100%準(zhǔn)確性,僅供參考。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。
發(fā)表評論
更多 網(wǎng)友評論0 條評論)
暫無評論

返回頂部

主站蜘蛛池模板: 欧美特黄一片aa大片免费看| 94久久国产乱子伦精品免费| 超薄肉色丝袜一区二区| 明星换脸高清一区二区| 国产日韩在线视频| 亚洲av乱码一区二区三区| yy6080理aa级伦大片一级毛片| 欧美日韩一区二区三区四区在线观看| 在线国产一区二区| 亚洲日本在线播放| 4虎1515hh永久免费| 欧美三级在线免费观看| 国产欧美综合一区二区三区| 亚洲AV永久无码天堂网| 国产在线精品网址你懂的| 最近在线中文字幕电影资源| 国产无遮挡又黄又爽高潮| 久久精品国产精品亚洲毛片| 香蕉视频911| 无码一区二区波多野结衣播放搜索 | 色噜噜狠狠色综合日日| 无忧传媒视频免费观看入口| 啊快捣烂了啦h男男开荤粗漫画| 下面一进一出好爽视频| 真实国产老熟女粗口对白| 夜夜躁狠去2021| 亚洲国产成人片在线观看| 精品福利视频导航| 日b视频免费看| 动漫美女吸乳羞羞动漫| 99精品国产在热久久| 欧美日韩在线不卡| 国产成人精品亚洲精品| 久久久久久综合网天天| 精品国产乱码久久久久久浪潮| 好吊妞精品视频| 亚洲日本在线电影| 麻豆福利视频导航| 成人性生交大片免费看| 亚洲色四在线视频观看| 1000部国产成人免费视频|