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

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

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

BigInteger 的基本概念

1. 什么是 BigInteger

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

2. 特點(diǎn)

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

BigInteger 的構(gòu)造方式

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

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

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

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

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

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

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

BigInteger bigInt = BigInteger.valueOf(123456789L);
  • 注意
    • valueOf 方法只支持 long 范圍內(nèi)的數(shù)值。
    • 對(duì)于更大的數(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ù)

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

BigInteger randomBigInt = new BigInteger(50, new Random()); // 生成 50 位隨機(jī)數(shù)
  • 參數(shù)含義
    • 第一個(gè)參數(shù)是位數(shù)(bit 數(shù))。
    • 第二個(gè)參數(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ù)除法,不會(huì)產(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ù)平方算法,時(shí)間復(fù)雜度為 O(log(n)) ,比逐步計(jì)算效率更高。

3. 比較和最大最小值

比較大小

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

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

最大值和最小值

  • 返回兩個(gè)數(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)

求絕對(duì)值

BigInteger abs = a.abs();

求最大公約數(shù)

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

模反元素

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

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

代碼示例:

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

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

boolean isPrime = a.isProbablePrime(10); // 參數(shù)為測(cè)試的可信度
  • 參數(shù)是一個(gè)整數(shù),值越大,測(cè)試結(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 的每次操作都會(huì)返回一個(gè)新對(duì)象。如果需要頻繁修改值,可以考慮復(fù)用變量以減少對(duì)象創(chuàng)建。

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

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

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

總結(jié) 

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

相關(guān)文章

  • Springmvc返回html頁(yè)面問(wèn)題如何解決

    Springmvc返回html頁(yè)面問(wèn)題如何解決

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

    Android開(kāi)發(fā)中實(shí)現(xiàn)用戶(hù)注冊(cè)和登陸的代碼實(shí)例分享

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

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

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

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

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

    淺談springBoot注解大全

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

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

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

    Mysql存儲(chǔ)java對(duì)象實(shí)例詳解

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

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

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

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

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

    PostgreSQL Docker部署+SpringBoot集成方式

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

最新評(píng)論

和平区| 咸阳市| 凤城市| 左权县| 从江县| 都江堰市| 牡丹江市| 德昌县| 墨江| 图木舒克市| 庆阳市| 赤水市| 龙岩市| 洪雅县| 永城市| 龙山县| 徐州市| 邓州市| 贺兰县| 南雄市| 鹤庆县| 兖州市| 福建省| 凌源市| 平度市| 尼木县| 乐清市| 芦山县| 五台县| 乐平市| 济阳县| 仙桃市| 郧西县| 泰安市| 特克斯县| 塔河县| 齐齐哈尔市| 茌平县| 仙游县| 甘洛县| 兰考县|