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

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

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

今天遇到了這樣一個題

在這里插入圖片描述

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

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

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

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

在這里插入圖片描述

在這里插入圖片描述

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

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

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

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

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

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

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

運行結(jié)果:

在這里插入圖片描述

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

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

相關(guān)文章

  • Java之類加載機制案例講解

    Java之類加載機制案例講解

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

    SpringMVC配置404踩坑記錄

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

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

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

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

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

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

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

    Java中Sentinel框架詳解

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

    深入理解Spring Cloud Zuul過濾器

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

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

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

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

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

    SpringBoot中啟動時如何忽略某項檢測

    這篇文章主要介紹了SpringBoot中啟動時如何忽略某項檢測,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論

阳谷县| 海淀区| 罗甸县| 高邮市| 治多县| 罗江县| 东阳市| 九寨沟县| 武安市| 建水县| 柳河县| 保靖县| 泾阳县| 靖安县| 谢通门县| 郓城县| 九江市| 武汉市| 许昌县| 保靖县| 蓬溪县| 安平县| 绥德县| 嘉鱼县| 万载县| 金山区| 永泰县| 景德镇市| 分宜县| 新源县| 卫辉市| 犍为县| 静乐县| 华安县| 嘉荫县| 牙克石市| 合江县| 呈贡县| 上高县| 伊金霍洛旗| 临沧市|