【Java】BigInteger類的常用方法示例

示例源碼(JAVA8.0以上環境)

@Test
public void BigIntegerDemo() {
    //輸出方法
    BiConsumer<String, String> printString = (str1, str2) -> {
        System.out.println("");
        System.out.println(str1);
        System.out.println(str2);
        System.out.println("");
    };
    //返回的數據類型
    BiConsumer<String, BigInteger> printBigInteger = (str, value)//返回BigInteger類型
            -> printString.accept(str, value.toString());
    BiConsumer<String, Boolean> printBoolean = (str, value)//返回boolean類型
            -> printString.accept(str, value.toString());
    BiConsumer<String, Number> printNumber = (str, value)//返回基本引用類型的值
            -> printString.accept(str, value.toString());
    BiConsumer<String, byte[]> printByteArray = (str, value) //返回字節數組類型
            -> {
        System.out.println("");
        System.out.println(str);
        for (byte b : value)
            System.out.print(b + " ");
        System.out.println("");
    };

    //構造
    BigInteger a = new BigInteger("453450874096676472639326348257641303710161834190619335667127164952522384718364586");
    BigInteger b = new BigInteger("78653424176752165207651652675216571541671");
    BigInteger c = new BigInteger("4564534310345313423234");
    int n = 100;
    System.out.println("c" + " \t " + c);
    System.out.println("n" + " \t " + n);

    //十進制字符串形式輸出
    System.out.println("a" + " \t " + a.toString());
    System.out.println("b" + " \t " + b.toString());

    //四則運算
    printBigInteger.accept("a + b", a.add(b));//加法
    printBigInteger.accept("a - b", a.subtract(b));//減法
    printBigInteger.accept("a * b", a.multiply(b));//乘法
    printBigInteger.accept("a / b", a.divide(b));//整除,捨去小數

    //高級運算
    printBigInteger.accept("| a |", a.abs());//絕對值
    printBigInteger.accept("a * ( -1 )", a.negate());//相反數
    printBigInteger.accept("( a ) ^ n", a.pow(n));//冪,指數爲int整數
    printBigInteger.accept("( ( a ) ^ b ) % c", a.modPow(b, c));//冪模
    printBigInteger.accept("1 / a % b", a.modInverse(b));//倒數模
    printBigInteger.accept("a gcd b", a.gcd(b));//最大公約數
    printBoolean.accept("合數判斷", a.isProbablePrime(n));//false一定爲合數,true可能爲素數(可能性:1-1/pow(2,n))
    printBigInteger.accept("大於a的第一個可能的素數", a.nextProbablePrime());//求素數
    printNumber.accept("a的哈希值", a.hashCode());//哈希碼

    //餘數
    printBigInteger.accept("a % b", a.mod(b));//b必須爲正數
    printBigInteger.accept("a rem b", a.remainder(b));//求餘數,都可以爲負數

    //餘數2   [0]爲a/b [1]爲a%b
    printBigInteger.accept("a / b", a.divideAndRemainder(b)[0]);
    printBigInteger.accept("a % b", a.divideAndRemainder(b)[1]);

    //判斷
    printBoolean.accept("a == b", a.equals(b));//相等
    printNumber.accept("?{a : +,0,-}", a.signum());//正爲1;0爲0;負爲-1
    printBigInteger.accept("?{a > b}", a.andNot(b));//比較a>b返回1;a==b返回0;a<b返回-1
    printBigInteger.accept("max(a,b)", a.max(b));//最大值
    printBigInteger.accept("min(a,b)", a.min(b));//最小值

    //位運算
    printBigInteger.accept("a & b", a.or(b));//與
    printBigInteger.accept("a | b", a.or(b));//或
    printBigInteger.accept("! a", a.not());//非
    printBigInteger.accept("a ^ b", a.xor(b));//異或
    printBigInteger.accept("a & (!b)", a.andNot(b));//與非
    printBigInteger.accept("a << n", a.shiftLeft(n));//左移,位數爲int整數
    printBigInteger.accept("a >> n", a.shiftRight(n));//右移,位數爲int整數

    //比特
    printByteArray.accept("a的二進制補碼形式", a.toByteArray());
    printBigInteger.accept("a & ~(1 << n)", a.clearBit(n));//字節寫0,將二進制的a的第n位寫0
    printBigInteger.accept("a | ~(1 << n)", a.setBit(n));//字節寫1,將二進制的a的第n位寫1
    printBoolean.accept("a ^ (1 << n) ", a.testBit(n));//字節取反,1變爲0;0變爲1
    printBoolean.accept("a & (1 << n) != 0", a.testBit(n));//字節判斷,1爲true;2爲false
    printNumber.accept("a == 0 ? -1 : log2(a & -a)", a.getLowestSetBit());//二進制形式中最低位1後面0的個數
    printNumber.accept("a與符號不同的位的數量", a.bitCount());
    printNumber.accept("a不包括符號位的長度", a.bitLength());

    //進制轉換 [2,36],默認10
    System.out.println("a的二進制形式" + " \t " + a.toString(2));
    System.out.println("a的十六進制形式" + " \t " + a.toString(16));
    System.out.println("a的36進制形式" + " \t " + a.toString(36));

    //強制轉換爲基本數據類型,精度丟失
    System.out.println("a強轉byte" + " \t " + a.byteValue());
    System.out.println("a強轉short" + " \t " + a.shortValue());
    System.out.println("a強轉int" + " \t " + a.intValue());
    System.out.println("a強轉long" + " \t " + a.longValue());
    System.out.println("a強轉float" + " \t " + a.floatValue());
    System.out.println("a強轉double" + " \t " + a.doubleValue());

    //JAVA8.0開始用Exact,精度丟失拋出ArithmeticException異常
    System.out.println("a轉byte" + " \t " + a.byteValueExact());
    System.out.println("a轉short" + " \t " + a.shortValueExact());
    System.out.println("a轉int" + " \t " + a.intValueExact());
    System.out.println("a轉long" + " \t " + a.longValueExact());
}

輸出結果

c 4564534310345313423234
n 100
a 453450874096676472639326348257641303710161834190619335667127164952522384718364586
b 78653424176752165207651652675216571541671

a + b
453450874096676472639326348257641303710240487614796087832334816605197601289906257

a - b
453450874096676472639326348257641303710083180766442583501919513299847168146822915

a * b
35665463943644935405215143600640540719930925234954752694729628120197190844084201058966662498918631998470761139535869663206

a / b
5765176517651272757561765416575411574161

| a |
453450874096676472639326348257641303710161834190619335667127164952522384718364586

a * ( -1 )
-453450874096676472639326348257641303710161834190619335667127164952522384718364586

( a ) ^ n
44980506389810689085679252550991483521906089593213961785763020605755371957937666963685479567608629203077400985405315543857502776745520353027348595888820375940677783724976394556225862620495816542219988617317167737610365188367401289492844701647688304315929222373571384287768034572135982986127696723172297439877250923293259585052295768303569029488524088238167787483789704622854461754233022347931853093068761213299977575322472612898770154602451297412327025265115555188243058725692245595631371364137676344639059237720672685207029393224594535431155237302202798832324702337157560154784497122927012025361847438304853645424745913295507157806621456294529575107456624921974475945921444531979764813099044835490477749198811380836365543104605771147908380903928240423405269798542195301508932988640086945520024554618003953517266465253956038783196996103483266714840194355733839674411594509886948913242983862256169405954157213667298849140506145253168195181848526589635098751062283212839173577682984099231155617684915799379774618986274254475608814638225895621652592814895560439138397902472925219678184284396011530968834996917404692355718401049764005464716126892198143458957622516059742071729748187130159091315896597303237375462412484702991669360011527388867559671394563870904660680405979115957865027648360105347248471343527828656431007983952476277891271545121763813464655079852505641110213457908260531389581219366392045433010066271544962264324756845861746987891202226181131853559000299481870922182491972953694019469142267405538747826458150186190836844633143942642329161742611835802287693786215496607742945662572333456798649842637290781108308625998332529823028453750537869113614480162198600317528210182276341557881901095887841341963485852232101941508696331237385638106992776952051711986200150936376401660810218144714568993887391562917219688820846130427386123656566971416311871595644491977902404633173304624399723779839982406964628836920385574482402045867365157061133651264578106721649517137571541524189164915010669034116825160106551152767196490554088920982215349262680700415631979362849996368663369145130785038767148291663655654063049942042929437813619417554500158081827052603135118739186393716336184106184311991471670652069384374140320473517937095803229826632334108299350072475297761916691195200657131349049998769561598744893617697157651431314365310745714929200523906245795785605493629197825080296354784007338973247067266352073173182495171909060193537452591154263792380174288800165520728541857823395459316121049799416250568109096562522448930265052735413030448232973028721831668584757331910626735938307761138683820316701751283661083124423935858122970052440710968102575874937903292499674458586130326324553409502811128735167689739270323005888274523432145779336963535641960007854593583729869300138714182066624328811240726743713759767798990546318661385806428841072971286147974049795094580277128604425388903641449563896951929362129804866411258448825746757259230868612779293468840466980535970189002685464628834877797072451612600894464775908828222421003273307726783541119050870577180538083316707968416781756833487121630892985670981216279681688264252489535589670266761782349576432601692190766398049944655087244519783195474406756850364717178572491913424702426245233674754597861549778914775424066712327116693747122642848198338608031982319391671201327446876269755908567351207506771458583141461575010934083387593242256526858737416855502657915341128352609074810725036269890930737862421786358084529228616811868152286936582311304084647886965564623054093696153178756602489912109725266762410256728712887900066462190525344600063028008477983769523855844841200451345599972443982343578456914390644676732239462489464573083174496545536836290262012827390212738480842407737607213491522225869785756376761742088666037350295517224423696060542280063156521239251542036997684454313092979339201266225258689413310461770636206932795538217290001910505036189570301287349976764880170869231417907527440573773063920823737362866239286722439514569884439313591195228132972970504386867642750509653315013378123603494289331145735760349519270368528766023198381243521377111297580980790825254153192508097367096135434948427151010175209452740195776951124804741688743821035622026461118590504420594620273526867337559812481219347736362058694211745468218854648852848995680989687740795601411319177434210110936476531061426701786452279500195313746016916858168727271283466329691057127644678023760972493277689307962348387929838251290360356930889751731812699941789113124353258488648367241901329157414453894438762609360761191067106150218241429504439265573827292829227672225827193905393176682847534354640884398025517006811325666022341759097192446212982517133885245973584316551474203574845736832333809864336719433629843481199623328998645047250195636998731421755541630788982411346475703386937295801190044897678572803311354706175180505853992254411836755594545264145008783674062915390970785694226111715621598948371699874571530069165830407612467106247830370226983535603493281632023582641882932116380025170328324276224524563695170274539663838155584813692996580117425090276088515566354977190130134311535546804237698300509197824791041506863407812131495964587893692915080175859419591995118422392958277204473440281065274495071325927046363914887018963097174280014939106959681282280448941678992710951924424006356762746433070950920510747717174999059870419006516578005473001782006983644938553529036253884769718517166076410815514325950428116868848418755650423401554407829120998032858053379829426908229445530283625100017288628133080210243524844110488983303977215418584582804108019180658015841541203647928826193020539203544285452802398775913661720004971338161456225250406594167849941430249310155739314747764722508824415895481922795567132532776508568738896568757522391537139420754263484165506567967633983508267805275779632280194014172718194790488454986681612676415206938764231362695564606345962209465009277056848931542668113000302170041607808165069609703613637644293680408467962709362065116304486419630055707098044238785355007503373088604659463449873026746893666907898636524640138730177039556638052836614665097918536118057066480719851170328200602574298318957303597684167152121540163581698496731061578754251437475368539908752902349617330386368662900716820746935905442068732861908775402729060926503986887425586249650926011980244505828996225679953738475960677478303663828718515558304316299707945580638931520052137230318219415889594339412172262927570179101407930397653159841110488563972608734411792118489232037988883632579991214664019760945202638138037227718664231122485684369489918883867902391593104250511997863208919532371081104992489473063868660702880341074695137655036392438577055648827931845650181026736976054374085865132700147489845471820899754127186394193978857601567247660156143753444746563147995257077526411381411235250489396571903072201028931001975157516016587343181247074305341863049926029721590786478697311225001401153692914859958220566917844907226591995331828418074114600751835015374326879372604232906314440962495528195276088806158970576502132468550300481465084684393296199032899920437189096249514002810789435149706964978022609533502038678989561983398508282333727323007971129332360827168021692485012468157778226883846601618157659898638938763490214315142754891934612498775540870648566766956516161795330597720908060390478677987830468252710599161936473893872159177726516452141638608061181004886883775074316407108777473352985248918887641627200023725507587834083471574201223834794455187724158080240082183488752338180074699945031294430204565469485447423403678971547087690693851018606816668614225879472812735226043271313403505237434809690473979199497250234711478669777554383183917765329417712304977610942287001364488659545190273185249686629636383821674971289520651346111338935113163332406994734213804660589767543122522758521039520270090760143112748965987204755417950917480738032359542827997148185067752856541886439897821657666311877361828182016250551761343678041688611697751998168235066440212612955843554025624858992276140978188424809157408573766171426948305125376

( ( a ) ^ b ) % c
2432404755647088512410

1 / a % b
53565258008476233411513247706144276053138

a gcd b
1

合數判斷
false

大於a的第一個可能的素數
453450874096676472639326348257641303710161834190619335667127164952522384718365111

a的哈希值
1200154010

a % b
1555

a rem b
1555

a / b
5765176517651272757561765416575411574161

a % b
1555

a == b
false

?{a : +,0,-}
1

?{a > b}
453450874096676472639326348257641303710117937754168585044195158678077769657636616

max(a,b)
453450874096676472639326348257641303710161834190619335667127164952522384718364586

min(a,b)
78653424176752165207651652675216571541671

a & b
453450874096676472639326348257641303710196591178345337209402810330752986229178287

a | b
453450874096676472639326348257641303710196591178345337209402810330752986229178287

! a
-453450874096676472639326348257641303710161834190619335667127164952522384718364587

a ^ b
453450874096676472639326348257641303710152694741894586586470804056308371168450317

a & (!b)
453450874096676472639326348257641303710117937754168585044195158678077769657636616

a << n
574817272722667210150367019050242507207726303560371736498510426032870395366113821950336858508396114878803214336

a >> n
357709667013163256048099611213968660599528599304807

a的二進制補碼形式
15 76 20 3 -99 83 -52 -120 14 -88 117 92 -100 121 -37 40 -112 -103 -109 59 -90 122 82 -119 86 100 4 41 48 -101 110 46 -1 -86 

a & ~(1 << n)
453450874096676472639326348257641303710161834190618068016526936723120888015159210

a | ~(1 << n)
453450874096676472639326348257641303710161834190619335667127164952522384718364586

a ^ (1 << n) 
true

a & (1 << n) != 0
true

a == 0 ? -1 : log2(a & -a)
1

a與符號不同的位的數量
127

a不包括符號位的長度
268

a的二進制形式 1111010011000001010000000011100111010101001111001100100010000000111010101000011101010101110010011100011110011101101100101000100100001001100110010011001110111010011001111010010100101000100101010110011001000000010000101001001100001001101101101110001011101111111110101010
a的十六進制形式 f4c14039d53cc880ea8755c9c79db289099933ba67a528956640429309b6e2effaa
a的36進制形式 ja2mpyu6t69rxhj3vot7lsp0ymschw8ro2lsyx39ojatndrwfgyy
a強轉byte -86
a強轉short -86
a強轉int 1848573866
a強轉long 299824294323486634
a強轉float Infinity
a強轉double 4.5345087409667647E80

java.lang.ArithmeticException: BigInteger out of byte range

Process finished with exit code -1 useTime 651ms



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章