3
int main()
{
    unsigned long long key = 21739827982173982173921739217392173217397213271832193721973291732917321732132173971317382173213782163872163872163872163872163826176728328621321487219372198371298775647326409817402198732198432974329479832749173821732198732173217392173721372193728193782193792173921732171;
}

コンパイラは、割り当てたい数値が選択したタイプに対して大きすぎると言います。これを保存して操作を実行するにはどうすればよいですか?

4

3 に答える 3

6

C には、これに対する組み込みサポートはありません。「bignum」ライブラリ (「任意精度演算」または「多倍精度演算」ライブラリとも呼ばれます) が必要です。 GNU MPは十分に文書化されており、人気があります。

編集:変数の名前が「key」で、その数値が約900ビットの長さであることに気付きました。RSAを実装しようとしていますか? もしそうなら、十分にテストされた暗号化ライブラリを使用する必要があります。RSA の実装では、セキュリティを損なう可能性のある微妙なエラーが多数あります。そこにあるオプションには、gcryptNSS、およびOpenSSLが含まれます。libgcrypt とライセンス互換性がある場合は、それを使用することを強くお勧めします。その API とドキュメントが他の 2 つよりもはるかに優れているからです。

于 2012-11-01T17:42:43.217 に答える
3

ここから任意精度の整数ライブラリを入手できます。

http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic#Arbitrary-precision_software

任意精度ライブラリを使用して、大きな数を処理できます。

また

double を使用できます。範囲は約 300 桁ですが、指数と仮数の 2 つの部分として格納されるため、53 ビットの精度しかありません。53 ビットでは、正確に 15 ~ 18 桁の範囲の数値が得られます

于 2012-11-01T17:43:58.823 に答える
1

すべてではないにしても、ほとんどの場合、大整数または任意精度の数学ライブラリが必要になります。(C の整数型がそれほど大きくなることはめったにありません。特殊なコンパイラが存在する場合もありますが、それらはまったく主流ではありません。そのようなコンパイラを見つけることができたとしても、コードは移植可能ではありません。)

GMPをチェックしてください。

于 2012-11-01T17:43:21.507 に答える