C++ の「long」、「long long」、「long int」、「long long int」の違いは何ですか? 質問する

C++ の「long」、「long long」、「long int」、「long long int」の違いは何ですか? 質問する

私は Java から C++ に移行していますが、データ型についていくつか質問があります。Java では、 2 32longより大きい整数を保持するには、 と記述するだけです。しかし、C++ では、 はデータ型と修飾子の両方であるようです。long x;long

使い方はいくつかあるようですlong:

long x;
long long x;
long int x;
long long int x;

また、以下のようなこともあるようです。

long double x;

等々。

これらすべてのさまざまなデータ タイプの違いは何ですか。また、それらはすべて同じ目的を持っていますか。

ベストアンサー1

longと はlong int同一です。long longとも同様ですlong long int。 どちらの場合も はintオプションです。

2 つのセットの違いについては、C++ 標準ではそれぞれに最小範囲が義務付けられており、その幅はlong long少なくともですlong

標準 (C++11 ですが、これはかなり前から存在しています) の制御部分は、たとえば、3.9.1 Fundamental typesセクション 2 です (後のセクションでは、符号なし整数型に関する同様のルールが示されています)。

標準の符号付き整数型には、signed char、short int、int、long int、long long int の 5 つがあります。このリストでは、各型は、リスト内の先行する型と少なくとも同じ量のストレージを提供します。

7.1.6.2 Simple type specifiersには、指定子と実際の型との「マッピング」を示す表 9 もあり( はintオプションであることを示しています)、その一部を以下に示します。

Specifier(s)         Type
-------------    -------------
long long int    long long int
long long        long long int
long int         long int
long             long int

指定子と型の違いに注意してください。指定子はコンパイラに型を指示する方法ですが、異なる指定子を使用して最終的に同じ型にすることもできます。

したがって、質問が述べているように、longそれ自体は型でも修飾子でもなくlong int、単に型の指定子です。型long longの指定子であることも同様ですlong long int

C++ 標準自体は整数型の最小範囲を指定していませんが、 では C99 が1.2 Normative references適用されると引用しています。したがって、 で規定されている最小範囲がC99 5.2.4.2.1 Sizes of integer types <limits.h>適用されます。


に関して言えばlong double、それは実際には整数ではなく浮動小数点値です。整数型と同様に、少なくとも と同じ精度を持ち、その型の値のスーパーセット(少なくともそれらの値を意味し、必ずしもより多くのdouble値を意味するわけではありません)を提供する必要があります。

おすすめ記事