Javaで超大数を操作する方法

1181 ワード

Integerの最大値は2^31-1、Longの最大値は2^63-1であることを知っています.
32ビットマシンでも64ビットマシンでもそうです
通常、Integerの最大値より大きい数を操作する場合はLongで行います.
しかし、もし私たちがLongの最大値よりも大きな数に出会ったらどうしますか?
BigInteger
この場合も発生しますが、JavaではBigIntegerクラスが提供されています.BigIntegerオブジェクトをインスタンス化し、その演算方法を呼び出して加減するなどの操作が必要です.
次に例を挙げて説明する
操作UUID
Androidデバイスではanroidがよく使われていることを知っています.idはデバイスの一意性を表す
一般的にappをインストールした後に最初に起動すると、次のコードが呼び出されてデバイス番号が生成されます.

String private_id = Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);

その後、文字列を永続化してファイルシステムやデータベースに格納し、日活などの指標をこれに基づいて識別することができます.
その値は通常16進数です.例えば
AF84C9117B6C98D2
それを10進数に変えるのは
12647454730485537000
これはLongの最大値の範囲922337203685477600を超えています
そして元のandroidでidの基礎の上で簡単に暗号化して、例えばランダムな数の上で何をプラスします

String private_id = Settings.Secure.getString(getContext().getContentResolver(), Settings.Secure.ANDROID_ID);
BigInteger androidId = new BigInteger(private_id, 16);
Random random = new Random();
BigInteger result = androidId.add(new BigInteger(String.valueOf(random.nextInt(10000)), 10));
String hex = result.toString();