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

一文讓你徹底學(xué)會Java之BigInteger類常用操作

 更新時間:2025年04月26日 08:39:10   作者:憑君語未可  
這篇文章主要介紹了Java之BigInteger類常用操作的相關(guān)資料,BigInteger是Java中用于表示任意精度整數(shù)的類,解決了基本數(shù)據(jù)類型精度限制問題,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

BigInteger 的基本概念

1. 什么是 BigInteger

  • BigInteger 是 java.math 包中的類,專門用于表示任意精度的整數(shù)。
  • 它解決了基本數(shù)據(jù)類型(如 int、long)的精度限制問題。比如:
    • int 的最大值是 2³¹-1(21 億)。
    • long 的最大值是 2?³-1(約 19 位十進(jìn)制數(shù))。
    • 如果需要表示更大的整數(shù),就必須使用 BigInteger。

2. 特點(diǎn)

  • 不可變性
    • BigInteger 是不可變對象,每次運(yùn)算都會返回新的實例,而不會修改原有對象。
  • 任意精度
    • 只受限于可用內(nèi)存的大小,因此可以表示超大整數(shù)。
  • 底層實現(xiàn)
    • BigInteger 底層采用 int[] 數(shù)組存儲數(shù)據(jù),每個數(shù)組元素存儲一部分?jǐn)?shù)字,并通過數(shù)學(xué)算法進(jìn)行操作。
    • 例如,將一個非常大的數(shù)字按 32 位一段分開存儲。

BigInteger 的構(gòu)造方式

構(gòu)造函數(shù)

BigInteger 提供了多個構(gòu)造器用于創(chuàng)建實例。

1. 使用字符串構(gòu)造

這是最常用的構(gòu)造方法,支持任意大小的數(shù)字:

BigInteger bigInt = new BigInteger("123456789012345678901234567890");
  • 參數(shù)
    • 字符串表示的數(shù)字(支持正負(fù)號)。
    • 如果字符串中包含非法字符(如字母),會拋出 NumberFormatException。

2. 使用基本數(shù)據(jù)類型的轉(zhuǎn)換

通過靜態(tài)方法 BigInteger.valueOf 將 int 或 long 轉(zhuǎn)換為 BigInteger

BigInteger bigInt = BigInteger.valueOf(123456789L);
  • 注意
    • valueOf 方法只支持 long 范圍內(nèi)的數(shù)值。
    • 對于更大的數(shù)字,仍需使用字符串構(gòu)造。

3. 從二進(jìn)制、八進(jìn)制、十六進(jìn)制等進(jìn)制構(gòu)造

支持指定進(jìn)制的字符串構(gòu)造:

BigInteger bigInt = new BigInteger("1010", 2); // 二進(jìn)制 -> 十進(jìn)制:10
BigInteger hexInt = new BigInteger("1A", 16); // 十六進(jìn)制 -> 十進(jìn)制:26

4. 生成隨機(jī)數(shù)

通過構(gòu)造一個隨機(jī)數(shù):

BigInteger randomBigInt = new BigInteger(50, new Random()); // 生成 50 位隨機(jī)數(shù)
  • 參數(shù)含義
    • 第一個參數(shù)是位數(shù)(bit 數(shù))。
    • 第二個參數(shù)是隨機(jī)數(shù)生成器。

5. 常用常量

BigInteger.ZERO   // 表示 0
BigInteger.ONE    // 表示 1
BigInteger.TEN    // 表示 10

BigInteger 的常用操作

1. 算術(shù)運(yùn)算

BigInteger a = new BigInteger("12345");
BigInteger b = new BigInteger("67890");

加法

BigInteger sum = a.add(b); // 結(jié)果:80235

減法

BigInteger diff = a.subtract(b); // 結(jié)果:-55545

乘法

BigInteger product = a.multiply(b); // 結(jié)果:838102050

除法

BigInteger quotient = b.divide(a); // 結(jié)果:5

取模

BigInteger mod = b.remainder(a); // 結(jié)果:12345
  • 注意divide 是整數(shù)除法,不會產(chǎn)生小數(shù)部分。

混合運(yùn)算:加法、乘法

所有的運(yùn)算都是鏈?zhǔn)降?。例如?/p>

BigInteger result = a.add(b).multiply(a).divide(b);

2. 冪運(yùn)算

  • 普通冪運(yùn)算(不取模):
BigInteger base = new BigInteger("2");
BigInteger result = base.pow(10); // 2^10 = 1024
  • 模冪運(yùn)算(大數(shù)運(yùn)算中常用):
BigInteger base = new BigInteger("2");
BigInteger exp = new BigInteger("10");
BigInteger mod = new BigInteger("7");
BigInteger modPowResult = base.modPow(exp, mod); // (2^10) % 7 = 2

底層優(yōu)化:

  • 模冪運(yùn)算采用了指數(shù)平方算法,時間復(fù)雜度為 O(log(n)) ,比逐步計算效率更高。

3. 比較和最大最小值

比較大小

compareTo 方法返回以下結(jié)果:

  • 1:當(dāng)前對象大于比較對象。
  • -1:當(dāng)前對象小于比較對象。
  • 0:兩者相等。
    示例:
int compare = a.compareTo(b);

最大值和最小值

  • 返回兩個數(shù)中的較大或較小值:
BigInteger max = a.max(b);
BigInteger min = a.min(b);

4. 位運(yùn)算

按位操作

  • 按位與:
BigInteger result = a.and(b);
  • 按位或:
BigInteger result = a.or(b);
  • 按位異或:
BigInteger result = a.xor(b);

位移操作

  • 左移:
BigInteger result = a.shiftLeft(2); // 左移 2 位
  • 右移:
BigInteger result = a.shiftRight(2); // 右移 2 位

5. 數(shù)學(xué)相關(guān)

求絕對值

BigInteger abs = a.abs();

求最大公約數(shù)

BigInteger gcd = a.gcd(b); // 返回 a 和 b 的最大公約數(shù)

模反元素

模反元素是滿足以下公式的整數(shù):

( a × x ) % m = 1 (a \times x) \% m = 1(a×x)%m=1

代碼示例:

BigInteger modInverse = a.modInverse(mod); // 計算 a 的模反元素

檢查是否是質(zhì)數(shù)

boolean isPrime = a.isProbablePrime(10); // 參數(shù)為測試的可信度
  • 參數(shù)是一個整數(shù),值越大,測試結(jié)果的可靠性越高。

6. 進(jìn)制轉(zhuǎn)換

  • 轉(zhuǎn)為字符串(默認(rèn)十進(jìn)制):
String decimalStr = a.toString();
  • 轉(zhuǎn)為其他進(jìn)制表示:
String binaryStr = a.toString(2);  // 二進(jìn)制
String hexStr = a.toString(16);   // 十六進(jìn)制

優(yōu)化

1. 不可變性

BigInteger 的每次操作都會返回一個新對象。如果需要頻繁修改值,可以考慮復(fù)用變量以減少對象創(chuàng)建。

2. 注意內(nèi)存消耗

超大整數(shù)會消耗較多內(nèi)存。例如:

BigInteger big = new BigInteger("9".repeat(1000000)); // 100 萬位數(shù)字

總結(jié) 

到此這篇關(guān)于Java之BigInteger類常用操作的文章就介紹到這了,更多相關(guān)Java BigInteger類常用操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springmvc返回html頁面問題如何解決

    Springmvc返回html頁面問題如何解決

    這篇文章主要介紹了Springmvc返回html頁面問題如何解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • Android開發(fā)中實現(xiàn)用戶注冊和登陸的代碼實例分享

    Android開發(fā)中實現(xiàn)用戶注冊和登陸的代碼實例分享

    這篇文章主要介紹了Android開發(fā)中實現(xiàn)用戶注冊和登陸的代碼實例分享,只是實現(xiàn)基本功能,界面華麗度就請忽略啦XD 需要的朋友可以參考下
    2015-12-12
  • Java?SSM實現(xiàn)前后端協(xié)議聯(lián)調(diào)詳解下篇

    Java?SSM實現(xiàn)前后端協(xié)議聯(lián)調(diào)詳解下篇

    首先我們已經(jīng)知道,在現(xiàn)在流行的“前后端完全分離”架構(gòu)中,前后端聯(lián)調(diào)是一個不可能避免的問題,這篇文章主要介紹了Java?SSM實現(xiàn)前后端協(xié)議聯(lián)調(diào)過程
    2022-08-08
  • Java實現(xiàn)帶有權(quán)重隨機(jī)算法的示例詳解

    Java實現(xiàn)帶有權(quán)重隨機(jī)算法的示例詳解

    這篇文章主要為大家詳細(xì)介紹了Java如何實現(xiàn)帶有權(quán)重隨機(jī)算法,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • 淺談springBoot注解大全

    淺談springBoot注解大全

    本篇文章主要介紹了淺談springBoot注解大全,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • IDEA上運(yùn)行Flink任務(wù)的實戰(zhàn)教程

    IDEA上運(yùn)行Flink任務(wù)的實戰(zhàn)教程

    這篇文章主要介紹了IDEA上運(yùn)行Flink任務(wù)的實戰(zhàn)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Mysql存儲java對象實例詳解

    Mysql存儲java對象實例詳解

    這篇文章主要介紹了Mysql存儲java對象實例詳解的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • Java獲取本機(jī)IP地址的三種方法總結(jié)

    Java獲取本機(jī)IP地址的三種方法總結(jié)

    這篇文章主要為大家詳細(xì)介紹了java獲取本機(jī)IP地址的三種方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Java并發(fā)Timer源碼分析

    Java并發(fā)Timer源碼分析

    這篇文章講述了java并發(fā)編程的相關(guān)知識點(diǎn),并通過Timer源碼分析更深入的講解了java并發(fā)編程。
    2018-07-07
  • PostgreSQL Docker部署+SpringBoot集成方式

    PostgreSQL Docker部署+SpringBoot集成方式

    本文介紹了如何在Docker中部署PostgreSQL和pgadmin,并通過SpringBoot集成PostgreSQL,主要步驟包括安裝PostgreSQL和pgadmin,配置防火墻,創(chuàng)建數(shù)據(jù)庫和表,以及在SpringBoot中配置數(shù)據(jù)源和實體類
    2024-12-12

最新評論

安达市| 嘉峪关市| 晋城| 万宁市| 建昌县| 宁河县| 大兴区| 焉耆| 祁门县| 东源县| 克山县| 凉城县| 革吉县| 衡阳县| 东港市| 永胜县| 栖霞市| 麦盖提县| 凉城县| 和平县| 庆元县| 黔南| 靖西县| 西丰县| 桂平市| 古交市| 礼泉县| 万荣县| 上蔡县| 尼木县| 航空| 金湖县| 永福县| 杭锦后旗| 隆回县| 合作市| 东港市| 通河县| 泰和县| 连平县| 威信县|