5

数が非常に大きくなる可能性があることを考えると、安全に使用できunsigned longますか?

FWIW、Apache ログからすべてのマイクロ秒を合計しているため、数値が非常に大きくなる可能性があります。

4

8 に答える 8

9

32 ビット プラットフォームで保存できる最大値unsigned longが約 4G であることを考えると、これらの 4G マイクロ秒はわずか 71 分に変換されます。

64 ビット プラットフォーム (Windows 64 ビットであっても、Windows では long は常に 32 ビットであることに注意してください) では、最大 4G に 71 分を掛けたマイクロ秒をカウントできます。これは巨大です: 約 5800 世紀。

回答: unsigned long64 ビットであれば問題ありません。

于 2013-06-05T15:39:42.440 に答える
2

依存します。ウィキペディアに記載されunsigned longているように、少なくとも 32 ビットであることが保証されていますが、それはマシンに依存する可能性があると思います。32 ビットを使用すると、2^32 = 4294967296 の数値を表すことができます。4294967296 マイクロ秒は 4294 秒、つまり 1 時間を少し超えます。

もっと必要ですか?その場合は、unsigned long long64 ビットであることが保証されている を使用することを検討してください。ただし、これは C99 です。それ以外の場合は、 timeval 構造体が行うように、常に秒を別の変数に個別に格納できます。

于 2013-06-05T15:44:09.800 に答える
2

unsigned long integer を使用できます。そのサイズは 0 ~ 4294967295 バイトです

于 2013-06-05T19:03:26.843 に答える
1

32 ビットの符号なし整数は、マイクロ秒単位で約 1 時間 11 分になります。

4,294.967295 seconds

一方、64 ビットの符号なし整数では、50 万年以上になります。

于 2013-06-05T15:42:04.640 に答える
0

unistd.h宣言しuseconds_tます。


タイトルではなく質問の本文を参照して更新します。

を使用して秒数を数えtime_t、残りを を使用してマイクロ秒単位で保存しuseconds_tます。これにより、ソースは 100% 移植可能になります。


更新 2

最近の Debian が であると宣言しsuseconds_tていることを発見しましたlong int

于 2013-06-05T16:01:28.970 に答える