-2

Cで数値を表す変数が必要です600851475143が、この値は long の最大値よりも大きくなっています。つまり、2147483647どのデータ型を使用すればよいですか?

4

3 に答える 3

4

整数型を使用してくださいlong long
少なくとも -9223372036854775807 <= x <= +9223372036854775807 の範囲に適しています。

#include <stdio.h>
int main(int argc, char *argv[]) {
  long long big = 600851475143;
  printf("%lld\n", big);  // prints 600851475143
  return 0;
}

int64_tまたは、 uint64_t64 ビット型を使用することもできます。


上記の範囲は、C11 5.2.4.2.1 で指定された最小範囲です。

于 2013-09-07T16:43:05.163 に答える
3

unsigned long を使用します。これにより、0 以上の数値のみが許可されますが、範囲が拡張されます。long 型が 64 ビットであることを確認します。これにより、値の範囲も拡張されます。

LGPL の下でリリースされている gmplib を使用することもできます: http://gmplib.org/

于 2013-09-07T15:55:12.600 に答える
2

@H2CO3で提案されているように、任意精度の整数数学ライブラリを使用することに加えて、オーバーフローを心配せずにそのような大きな数を扱う予定がある場合は、これがおそらく最善の策です。コンパイラ/プラットフォームのドキュメントで表現可能な最大数を確認する必要があります。

符号付き算術演算が必要ない場合は、 unsigned longorunsigned long longを使用できます。それ以外の場合はsigned long long. 標準ではサイズが正確に規定されているわけではなく、最小値のみが指定されていることに注意してください (C99 ドラフト標準 - 付属書 E から):

#define LONG_MAX +2147483647
#define LONG_MIN -2147483647
#define LLONG_MAX +9223372036854775807
#define LLONG_MIN -9223372036854775807
// [...]
#define ULONG_MAX 4294967295
#define ULLONG_MAX 18446744073709551615
于 2013-09-07T16:04:48.487 に答える