亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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ù)上述思路,我們很容易就可以寫(xiě)出代碼

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)文章

  • Spring框架事務(wù)屬性中事務(wù)隔離級(jí)別與傳播行為全面講解

    Spring框架事務(wù)屬性中事務(wù)隔離級(jí)別與傳播行為全面講解

    這篇文章主要介紹了Spring框架聲明式事務(wù)的事務(wù)隔離級(jí)別和事務(wù)傳播行為,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-11-11
  • ANSI,Unicode,BMP,UTF等編碼概念實(shí)例講解

    ANSI,Unicode,BMP,UTF等編碼概念實(shí)例講解

    這篇文章主要介紹了ANSI,Unicode,BMP,UTF等編碼概念實(shí)例講解,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • 一篇超詳細(xì)的Spring Boot對(duì)jdbc支持的文章

    一篇超詳細(xì)的Spring Boot對(duì)jdbc支持的文章

    JdbcTemplate 是在JDBC API基礎(chǔ)上提供了更抽象的封裝,并提供了基于方法注解的事務(wù)管理能力。 通過(guò)使用SpringBoot自動(dòng)配置功能并代替我們自動(dòng)配置beans,下面給大家介紹spring boot中使用JdbcTemplate相關(guān)知識(shí),一起看看吧
    2021-07-07
  • Java中EnumMap的使用解析

    Java中EnumMap的使用解析

    這篇文章主要介紹了Java中EnumMap的使用解析,EnumMap?是一種特殊的?Map,它要求自身所有的鍵來(lái)自某個(gè)枚舉類型,EnumMap?的內(nèi)部可以作為一個(gè)數(shù)組來(lái)實(shí)現(xiàn),因此它們的性能非常好,你可以放心地用?EnumMap?來(lái)實(shí)現(xiàn)基于枚舉的查詢,需要的朋友可以參考下
    2023-11-11
  • Java基礎(chǔ)學(xué)習(xí)之IO流應(yīng)用案例詳解

    Java基礎(chǔ)學(xué)習(xí)之IO流應(yīng)用案例詳解

    這篇文章主要為大家詳細(xì)介紹了Java?IO流的三個(gè)應(yīng)用案例:點(diǎn)名器、集合到文件和文件到集合,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2022-09-09
  • Java后端產(chǎn)生驗(yàn)證碼后臺(tái)驗(yàn)證功能的實(shí)現(xiàn)代碼

    Java后端產(chǎn)生驗(yàn)證碼后臺(tái)驗(yàn)證功能的實(shí)現(xiàn)代碼

    這篇文章主要介紹了Java后臺(tái)產(chǎn)生驗(yàn)證碼后臺(tái)驗(yàn)證功能,本文文字結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06
  • Springboot配置文件相關(guān)說(shuō)明解析

    Springboot配置文件相關(guān)說(shuō)明解析

    這篇文章主要介紹了Springboot配置文件相關(guān)說(shuō)明解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • java中數(shù)組的相關(guān)知識(shí)小結(jié)(推薦)

    java中數(shù)組的相關(guān)知識(shí)小結(jié)(推薦)

    下面小編就為大家?guī)?lái)一篇java中數(shù)組的相關(guān)知識(shí)小結(jié)(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07
  • java實(shí)現(xiàn)人工智能化屏幕監(jiān)控窗口

    java實(shí)現(xiàn)人工智能化屏幕監(jiān)控窗口

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)人工智能化屏幕監(jiān)控窗口,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Spring Boot 自定義 Shiro 過(guò)濾器無(wú)法使用 @Autowired問(wèn)題及解決方法

    Spring Boot 自定義 Shiro 過(guò)濾器無(wú)法使用 @Autowired問(wèn)題及解決方法

    這篇文章主要介紹了Spring Boot 自定義 Shiro 過(guò)濾器無(wú)法使用 @Autowired問(wèn)題及解決方法 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06

最新評(píng)論