最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java不用算數(shù)運(yùn)算符來(lái)實(shí)現(xiàn)求和方法

 更新時(shí)間:2022年04月02日 15:06:28   作者:Scintillator. /  
我們都知道,Java的運(yùn)算符除了具有優(yōu)先級(jí)之外,還有一個(gè)結(jié)合性的特點(diǎn)。當(dāng)一個(gè)表達(dá)式中出現(xiàn)多種運(yùn)算符時(shí),執(zhí)行的先后順序不僅要遵守運(yùn)算符優(yōu)先級(jí)別的規(guī)定,還要受運(yùn)算符結(jié)合性的約束,以便確定是自左向右進(jìn)行運(yùn)算還是自右向左進(jìn)行運(yùn)算,但是如果不用運(yùn)算符怎么求和呢

今天遇到了這樣一個(gè)題

在這里插入圖片描述

題目說(shuō)了不能用算數(shù)運(yùn)算符,那么我們就只能從 邏輯運(yùn)算符 和 移位運(yùn)算符 入手了。

我們知道 ^ (異或)操作是對(duì)兩個(gè)數(shù)進(jìn)行無(wú)進(jìn)位求和,如果兩個(gè)數(shù)相加本來(lái)就不產(chǎn)生進(jìn)位,那么該和就是兩數(shù)之和。 這就是解題的關(guān)鍵所在。一般來(lái)說(shuō),兩數(shù)相加是會(huì)產(chǎn)生進(jìn)位的,而要得到正確的和,應(yīng)該是在 “無(wú)進(jìn)位之和” 的基礎(chǔ)上加上進(jìn)位,那我們首先應(yīng)該得到進(jìn)位。我們知道,當(dāng)兩個(gè)數(shù)對(duì)應(yīng)位置都為1的情況下,才會(huì)有進(jìn)位的產(chǎn)生,即對(duì)應(yīng)位置 A&B==1的條件下,就可以得到每一位的進(jìn)位,但是進(jìn)位是將這個(gè)1加到對(duì)應(yīng)的更高一位,所以我們將得到的進(jìn)位整體進(jìn)行左移一位,再和之前得到的 “無(wú)進(jìn)位之和” 相加,就可以得到兩數(shù)之和。

我們發(fā)現(xiàn)這里就可以無(wú)限套娃了,要得到 “無(wú)進(jìn)位之和” 和 “產(chǎn)生的進(jìn)位” 之和,那么將這兩個(gè)數(shù)再分別看做新的兩個(gè)數(shù),對(duì)其求和。也是重復(fù)之前的操作,直到兩數(shù)不能產(chǎn)生進(jìn)位,就可以直接通過(guò) ^ 運(yùn)算得到結(jié)果。

假設(shè)我們求 23 + 16 的值

在這里插入圖片描述

在這里插入圖片描述

根據(jù)上述思路,我們很容易就可以寫出代碼

public static int addAB(int A, int B) {
		// 當(dāng)兩數(shù)的產(chǎn)生的進(jìn)位為 0,就退出循環(huán),返回其無(wú)進(jìn)位和,就是結(jié)果
        while ((A & B) != 0) {
            int A_B = A ^ B;// 無(wú)進(jìn)位求和
            int AB = (A & B) << 1;// 得到進(jìn)位
            // 接下來(lái)就是求 得到的進(jìn)位 + 無(wú)進(jìn)位之和,重復(fù)前面的操作,直到不產(chǎn)生進(jìn)位
            A = A_B;
            B = AB;
        }
        // 最后返回新的無(wú)進(jìn)位之和
        return (A ^ B);
    }

那么為了驗(yàn)證它的正確性,我們這里使用對(duì)數(shù)器,將該函數(shù)與 ’ + ’ 運(yùn)算符比較。

public static void main(String[] args) {
    int count = 1_0000_0000;// 比較次數(shù) 100000000次
    Random random = new Random();// 生成隨機(jī)數(shù)字
    boolean flag = true;// 相等則為 true

    for (int i = 0; i < count; i++) {
        int num1 = random.nextInt(Integer.MAX_VALUE/2);// 隨機(jī)正數(shù)1
        int num1_2 = random.nextInt(Integer.MAX_VALUE/2);// 隨機(jī)正數(shù)2
        // 隨機(jī)正數(shù)1 + 隨機(jī)正數(shù)2
        if ((num1+num1_2) != addAB(num1,num1_2)){
            // 有一次不相等的,則退出循環(huán)
            flag = false;
            break;
        }

        int num2 = -random.nextInt(Integer.MAX_VALUE/2);// 隨機(jī)負(fù)數(shù)1
        int num2_2 = -random.nextInt(Integer.MAX_VALUE/2);// 隨機(jī)負(fù)數(shù)2
        // 隨機(jī)負(fù)數(shù)1  + 隨機(jī)負(fù)數(shù)2
        if ((num2+num2_2) != addAB(num2,num2_2)){
            // 有一次不相等的,則退出循環(huán)
            flag = false;
            break;
        }

        int num3 = random.nextInt(Integer.MAX_VALUE);// 隨機(jī)正數(shù)
        int num4 = -random.nextInt(Integer.MAX_VALUE);// 隨機(jī)負(fù)數(shù)
        // 隨機(jī)正數(shù)  + 隨機(jī)負(fù)數(shù)
        if ((num3+num4) != addAB(num3,num4)){
            // 有一次不相等的,則退出循環(huán)
            flag = false;
            break;
        }
    }
    System.out.println(flag);
}

運(yùn)行結(jié)果:

在這里插入圖片描述

最后輸出結(jié)果為 true ,說(shuō)明我們計(jì)算隨機(jī)產(chǎn)生的 正數(shù)+正數(shù)、負(fù)數(shù)+負(fù)數(shù)、正數(shù)+負(fù)數(shù) 分別100000000次,沒(méi)有一次出錯(cuò),說(shuō)明該函數(shù)可靠。

到此這篇關(guān)于Java不用算數(shù)運(yùn)算符來(lái)實(shí)現(xiàn)求和方法的文章就介紹到這了,更多相關(guān)Java 求和 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java之類加載機(jī)制案例講解

    Java之類加載機(jī)制案例講解

    這篇文章主要介紹了Java之類加載機(jī)制案例講解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • SpringMVC配置404踩坑記錄

    SpringMVC配置404踩坑記錄

    本文主要介紹了SpringMVC配置404踩坑記錄,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • Spring如何動(dòng)態(tài)自定義logback日志目錄詳解

    Spring如何動(dòng)態(tài)自定義logback日志目錄詳解

    這篇文章主要給大家介紹了關(guān)于Spring如何動(dòng)態(tài)自定義logback日志目錄的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-10-10
  • Spring中利用配置文件和@value注入屬性值代碼詳解

    Spring中利用配置文件和@value注入屬性值代碼詳解

    這篇文章主要介紹了Spring中利用配置文件和@value注入屬性值代碼詳解,代碼中注釋比較詳細(xì),具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Springboot發(fā)送post請(qǐng)求的幾種方式總結(jié)

    Springboot發(fā)送post請(qǐng)求的幾種方式總結(jié)

    這篇文章主要為大家詳細(xì)介紹了Springboot發(fā)送post請(qǐng)求的幾種方式,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定的幫助,感興趣的小伙伴可以了解一下
    2024-01-01
  • Java中Sentinel框架詳解

    Java中Sentinel框架詳解

    Sentinel是一個(gè)高可用、高擴(kuò)展、高穩(wěn)定性的開(kāi)源流量控制和熔斷降級(jí)框架,可以在分布式系統(tǒng)中實(shí)現(xiàn)實(shí)時(shí)的流量控制,防止系統(tǒng)因流量過(guò)大導(dǎo)致系統(tǒng)崩潰和服務(wù)降級(jí),Sentinel面向所有的Java應(yīng)用,本文就給大家詳細(xì)介紹一下Java中Sentinel框架,需要的朋友可以參考下
    2023-06-06
  • 深入理解Spring Cloud Zuul過(guò)濾器

    深入理解Spring Cloud Zuul過(guò)濾器

    這篇文章主要給大家介紹了關(guān)于Spring Cloud Zuul過(guò)濾器的相關(guān)資料,通過(guò)閱讀本文您將了解:Zuul過(guò)濾器類型與請(qǐng)求生命周期、如何編寫Zuul過(guò)濾器、如何禁用Zuul過(guò)濾器和Spring Cloud為Zuul編寫的過(guò)濾器及其功能,需要的朋友可以參考下。
    2017-02-02
  • Java實(shí)現(xiàn)word/pdf轉(zhuǎn)html并在線預(yù)覽

    Java實(shí)現(xiàn)word/pdf轉(zhuǎn)html并在線預(yù)覽

    這篇文章主要為大家詳細(xì)介紹了如何利用Java語(yǔ)言實(shí)現(xiàn)word、pdf文件轉(zhuǎn)html并在線預(yù)覽的功能,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2023-05-05
  • Spring Boot Actuator監(jiān)控端點(diǎn)小結(jié)

    Spring Boot Actuator監(jiān)控端點(diǎn)小結(jié)

    這篇文章主要介紹了Spring Boot Actuator監(jiān)控端點(diǎn)小結(jié),需要的朋友可以參考下
    2017-06-06
  • SpringBoot中啟動(dòng)時(shí)如何忽略某項(xiàng)檢測(cè)

    SpringBoot中啟動(dòng)時(shí)如何忽略某項(xiàng)檢測(cè)

    這篇文章主要介紹了SpringBoot中啟動(dòng)時(shí)如何忽略某項(xiàng)檢測(cè),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評(píng)論

永嘉县| 白玉县| 神木县| 颍上县| 雅安市| 赣州市| 荔波县| 天津市| 尚义县| 佳木斯市| 临江市| 北票市| 固阳县| 武乡县| 灵璧县| 彩票| 滕州市| 淅川县| 马鞍山市| 三原县| 南江县| 屏山县| 蒙城县| 万安县| 陵川县| 清流县| 营口市| 清流县| 营山县| 平远县| 台南县| 麻栗坡县| 石渠县| 承德县| 盱眙县| 高清| 米易县| 仁怀市| 红桥区| 台东县| 高雄市|