259

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

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

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

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

long double x;

等々。

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

4

7 に答える 7

5

Java では alongは常に 64 ビットですが、C++ ではこれはコンピューターのアーキテクチャとオペレーティング システムに依存します。たとえば、 alongは Linux では 64 ビット、Windows では 32 ビットです (これは、後方互換性を維持するために行われ、32 ビット プログラムを変更せずに 64 ビット Windows 上でコンパイルできるようにします)。long intの同義語ですlong

後に、long long「今回はWindows上で実質的に長い(64ビット)」という意味で導入されました。long long intはこれと同義です。

、などを避け、代わりに以下を使用することは、適切な C++ スタイルと見なされます。 shortintlong

std::int8_t   # exactly  8 bits
std::int16_t  # exactly 16 bits
std::int32_t  # exactly 32 bits
std::int64_t  # exactly 64 bits

std::size_t   # can hold all possible object sizes, used for indexing

これらのint*_tタイプは、<cstdint>ヘッダーを含めることで使用できます。size_tです<stdlib.h>

于 2020-06-01T12:39:57.010 に答える
3

歴史的に、プロセッサが 8 ビットまたは 16 ビットの語長を持っていた初期の C 時代には、今日(16 ビット)intと同じでした。ある意味では、 int は、、またはshortよりも抽象的なデータ型です。ビット幅について確信が持てないからです。charshortlonglong long

定義するときint n;、これを「このマシンのビット幅と速度の最適な妥協点を n に与えてください」と訳すことができます。intおそらく将来的には、コンパイラが 64 ビットに変換されることを期待する必要があります。したがって、変数を 32 ビット以上にしたくない場合は、longデータ型として明示的に使用することをお勧めします。

[編集: #include <stdint.h>int##_t 型を使用してビット幅を確保する適切な方法のようですが、まだ標準には含まれていません。]

于 2014-08-13T11:23:24.893 に答える