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

聊聊Java BigInteger里面的mod和remainder的區(qū)別

 更新時(shí)間:2021年08月13日 15:23:00   作者:磚業(yè)洋__  
這篇文章主要介紹了聊聊Java BigInteger里面的mod和remainder的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

BigInteger里的mod和remainder區(qū)別

下面直接上圖吧,稍后解釋關(guān)于mod和remainder以及負(fù)數(shù)求余求模的區(qū)別。

mod是模運(yùn)算,remainder是求余運(yùn)算

如果被除數(shù)是正整數(shù),mod和remainder的結(jié)果沒區(qū)別。mod運(yùn)算除數(shù)只能為正數(shù)。

取模運(yùn)算(“Modulo Operation”)和取余運(yùn)算(“Complementation ”)兩個(gè)概念有重疊的部分但又不完全一致。主要的區(qū)別在于對(duì)負(fù)整數(shù)進(jìn)行除法運(yùn)算時(shí)操作不同。取模主要是用于計(jì)算機(jī)術(shù)語中。取余則更多是數(shù)學(xué)概念。

假設(shè)有式子a ÷ b = c ··· r

當(dāng)a和b符號(hào)一致時(shí)的情況:a,b均大于0時(shí),求模運(yùn)算和求余運(yùn)算所得的c的值一致,r >= 0。a,b均小于0時(shí),只能進(jìn)行求余運(yùn)算,因?yàn)榍竽_\(yùn)算除數(shù)b必須為正,r也是大于等于0。

當(dāng)a和b符號(hào)不一致時(shí),c不一樣,r也不一樣。

  • 求余運(yùn)算結(jié)果,r不為0時(shí), r 的符號(hào)和a一致。即余數(shù)符號(hào)和被除數(shù)符號(hào)必須相同。
  • 求模運(yùn)算結(jié)果,r不為0時(shí),r 的符號(hào)和b一致,而因?yàn)榍竽_\(yùn)算時(shí),b必須大于0,所以r一定大于等于0,即模運(yùn)算的結(jié)果一定是非負(fù)數(shù)。

我們來從java的BigInteger源碼來看看實(shí)現(xiàn),當(dāng)b小于等于0時(shí)會(huì)出現(xiàn)什么情況,假設(shè)這里r = a.mod(b),那么b必須為正數(shù),否則報(bào)異常

Exception in thread "main" java.lang.ArithmeticException: BigInteger: modulus not positive

來看mod源碼:

    public BigInteger mod(BigInteger m) {
        // signum是此BigInteger的符號(hào):-1表示負(fù)數(shù),0表示零,或1表示正數(shù)。
        // 請(qǐng)注意,BigInteger零必須具有0的符號(hào)。這對(duì)于確保每個(gè)BigInteger值只有一個(gè)表示是必要的。
        if (m.signum <= 0)
            throw new ArithmeticException("BigInteger: modulus not positive");
 
        BigInteger result = this.remainder(m);
        return (result.signum >= 0 ? result : result.add(m));
        // 可以看出mod和remainder的區(qū)別就在于,mod的模必須為正,否則異常,并且取余的值小于0點(diǎn)話還要加上模數(shù)m
    }

比如 -14 ÷ 3 = -4 ··· -2(余數(shù)符號(hào)和被除數(shù)符號(hào)必須相同

余數(shù)就是-2,這里如果是remainder取余運(yùn)算,-14 remainder 3 = -2,結(jié)果是-2

如果是mod模運(yùn)算,在remainder基礎(chǔ)上判斷正負(fù),這里-2是負(fù)數(shù),加上模數(shù)(可認(rèn)為是除法的除數(shù)),這里加上3,mod模運(yùn)算結(jié)果就是1,-14 mod 3 = 1

-10 ÷ 3 = -3 ··· -1

余數(shù)就是-1,這里如果是remainder取余運(yùn)算,-10 remainder 3 = -1,結(jié)果是-1

如果是mod模運(yùn)算,在remainder基礎(chǔ)上判斷正負(fù),這里-1是負(fù)數(shù),加上模數(shù)(可認(rèn)為是除法的除數(shù)),這里加上3,mod模運(yùn)算結(jié)果就是2,-10 mod 3 = 2

7 ÷ -3 = -2 ··· 1

余數(shù)是1,除數(shù)是負(fù)數(shù),這里只能取模運(yùn)算remiander 7 remainder -3 = 1,結(jié)果是1。但是這里余數(shù)居然大于除數(shù)了?。。?!

所以可以這么說,我們小學(xué)所學(xué)的余數(shù)一定小于除數(shù)這個(gè)結(jié)論是針對(duì)除數(shù)為正數(shù)而言。并且由前兩個(gè)例子也可以看出,取模運(yùn)算的值也一定小于除數(shù),前提條件是除數(shù)為正才能取模。

如果被除數(shù)是0,不管是取模還是取余結(jié)果都是0。

0%-5=0

0mod3=0

0remainder-3=0

......

如果不是大整數(shù),只是普通的int型,比如System.out.println(5 % -3);

打印出來是2

所以java中,%是求余運(yùn)算,而不是取模運(yùn)算。

另外各個(gè)環(huán)境下%運(yùn)算符的含義不同,比如c/c++,java 為取余,而python則為取模。

BigInteger類的一些使用心得

這幾天做信息安全作業(yè)的rsa算法,用到了很多大數(shù)的方法。

下面總結(jié)一下以后方便找

1.給大數(shù)賦值

BigInteger p = new BigInteger("10669721913248017310");

或者,X3是string或者int都行。

BigInteger cx= new BigInteger("" + X3) ;  

2.把int型轉(zhuǎn)化為string型

int j=123;
String X1=String.valueOf(j);

3.把兩個(gè)字符串拼接

String X1=1234;
String X2=1545;
String X3=X2+X1;

之后有的話繼續(xù)更新。以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java多線程消息隊(duì)列的實(shí)現(xiàn)代碼

    java多線程消息隊(duì)列的實(shí)現(xiàn)代碼

    本篇文章主要介紹了java多線程消息隊(duì)列的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • hashset去除重復(fù)值原理實(shí)例解析

    hashset去除重復(fù)值原理實(shí)例解析

    這篇文章主要介紹了hashset去除重復(fù)值原理實(shí)例解析,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • ConcurrentHashMap線程安全及實(shí)現(xiàn)原理實(shí)例解析

    ConcurrentHashMap線程安全及實(shí)現(xiàn)原理實(shí)例解析

    這篇文章主要介紹了ConcurrentHashMap線程安全及實(shí)現(xiàn)原理實(shí)例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • Java自動(dòng)解壓文件實(shí)例代碼

    Java自動(dòng)解壓文件實(shí)例代碼

    Java自動(dòng)解壓文件實(shí)例代碼,需要的朋友可以參考一下
    2013-04-04
  • java關(guān)于Date日期類型的大小比較

    java關(guān)于Date日期類型的大小比較

    這篇文章主要介紹了java關(guān)于Date日期類型的大小比較,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Spring Cloud Gateway打造可擴(kuò)展的微服務(wù)網(wǎng)關(guān)

    Spring Cloud Gateway打造可擴(kuò)展的微服務(wù)網(wǎng)關(guān)

    微服務(wù)網(wǎng)關(guān)是一個(gè)位于客戶端和后端微服務(wù)之間的服務(wù)器,用于處理所有與客戶端的通信,Spring Cloud Gateway都是一個(gè)值得考慮的選擇,它將幫助您更好地管理和保護(hù)您的微服務(wù),感興趣的朋友一起看看吧
    2023-11-11
  • springboot配置resilience4j全過程

    springboot配置resilience4j全過程

    這篇文章主要介紹了springboot配置resilience4j全過程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • JDBC下Idea添加mysql-jar包的詳細(xì)過程

    JDBC下Idea添加mysql-jar包的詳細(xì)過程

    這篇文章主要介紹了JDBC下Idea添加mysql-jar包的詳細(xì)過程,添加jar包首先到官網(wǎng)下載jar包,然后idea導(dǎo)入jar包,在就是檢查,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-11-11
  • Elasticsearch查詢Range Query語法示例

    Elasticsearch查詢Range Query語法示例

    這篇文章主要為大家介紹了Elasticsearch查詢Range Query語法示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 基于Java的Scoket編程

    基于Java的Scoket編程

    本文詳細(xì)講解了基于Java的Scoket編程,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12

最新評(píng)論

齐河县| 太保市| 鱼台县| 昌吉市| 潢川县| 保定市| 珠海市| 南安市| 安新县| 卓资县| 大丰市| 永嘉县| 乌兰县| 伊金霍洛旗| 漳平市| 太仆寺旗| 鄂托克前旗| 安徽省| 黄浦区| 同心县| 昌邑市| 固镇县| 喜德县| 新乐市| 潢川县| 拜泉县| 长子县| 陈巴尔虎旗| 县级市| 山阴县| 苏州市| 白城市| 岗巴县| 甘谷县| 阿拉善盟| 琼结县| 富顺县| 江山市| 额敏县| 北碚区| 阳朔县|