4

私の課題では、「これを達成するためにlongintまたはlonglongプライベートメンバーを追加しないでください。どちらも実際にintよりも大きな数を格納できるという保証はありません。」intの最大値は2^31-1で、longlongの最大値は2^63-1です。それで、誰かが私に与えられた文が真実である理由を私に例を与えることができますか?

前もって感謝します!

4

2 に答える 2

7

それはまさにそれが言うことを意味します。long longがより多くの数を格納できるという保証はありませんint少なくとも同じくらいの大きさですが、同じでもかまいません。

intの最大値は2^31-1で、longlongの最大値は2^63-1です。

これは、一部のプラットフォームや一部のコンパイラに当てはまる可能性がありますが、常に同じであるとは限りません。C++も保証しません。

3.9.1基本タイプ[basic.fundamental]

2)5つの標準符号付き整数タイプがあります:「<code> signedchar」、「<code> short int」、「<code> int」、「<code> long int」、および「<code>longlongint」 。このリストでは、 各タイプは、リスト内でその前にあるものと少なくとも同じ量のストレージを提供します。[...](私の強調)

于 2012-11-19T02:35:08.917 に答える
2

C規格は、2つの関連する基準を指定しています。

  • sizeof(char) ≤ sizeof(short) ≤ sizeof(int) ≤ sizeof(long) ≤ sizeof(long long) ≤ sizeof(uintmax_t)

    これは、ISU / IEC 9899:2011、§6.2.5タイプ、¶8で間接的に指定されています。同じ符号と異なる整数変換ランク(6.3.1.1を参照)を持つ任意の2つの整数タイプの場合、タイプの値の範囲は小さい整数変換ランクは、他のタイプの値のサブ範囲です。

  • タイプの最大値の最小許容値(ISO / IEC 9899:2011、§5.2.4.2.1整数タイプのサイズ<limits.h>):

    • SCHAR_MAX≥127// 27 -1
    • SHRT_MAX≥32,767// 215 -1
    • INT_MAX≥32,767// 215 -1
    • LONG_MAX≥2,147,483,647 // 231-1
    • LLONG_MAX≥9,223,372,036,854,775,807 // 263-1

引用は正式には正しいです。longより広い範囲を格納しないシステムを考案することは可能ですint—実際、これはほとんどの32ビットシステム(私が知っているすべてのシステム)に当てはまり、Windows64にも当てはまります。正確である可能性は低くなります。 wrt long long; 私はどこにシステムがないかを知りませんsizeof(int) == sizeof(long long)(そして、引用された不等式のためにsizeof(int) == sizeof(long))。ほとんどのUnix64ビットシステムでsizeof(int) == 4は、、、、sizeof(long) == 8およびsizeof(long long) == 8; Windows 64では、 (または)sizeof(long) == 4のみが64ビットタイプです。long long__int64

于 2012-11-19T03:01:28.120 に答える