2

重複の可能性:
int、longなどのサイズ
`long`は少なくとも32ビットであることが保証されていますか?

コンピューターの各データ型の最大値を調べたいと思いました。コードは:

int main() {
    using namespace std;
    cout << numeric_limits<int>::max() << endl;
    cout << numeric_limits<long>::max() << endl;
    cout << numeric_limits<long long>::max() << endl;

    return 0;
}

印刷するもの:

2147483647
2147483647
9223372036854775807

質問1:なぜintlong同じですか?

質問2:上記の出力は64ビットのVS2010からのものです。私のC++プログラムは64ビットとして実行されていますか?

4

4 に答える 4

6

質問1:なぜintとlongが同じなのですか?

さまざまな理由(利便性)により、マシンアーキテクチャでサポートされる整数のサイズは2の累乗になる傾向があります。最新のプロセッサのほとんどは、8、16、32、および64ビット整数でネイティブに動作できます。charただし、一般shortintに使用される5つの整数型があります:、、、、、、longおよびlong long。したがって、そのうちの2つは同じサイズである必要があります。

  • ほとんどの16ビットプラットフォームで、int両方shortとも16ビットです。

  • ほとんどの32ビットプラットフォームで、int両方longとも32ビットです。

  • ほとんどの64ビットプラットフォームで、long両方long longとも64ビットです。例外が1つあります...

質問2:上記の出力は64ビットのVS2010からのものです。私のC++プログラムは64ビットとして実行されていますか?

このデータからはわかりません。Windowsは、32ビットプログラムと64ビットプログラムの両方で同じサイズのlongプラットフォームです。int

于 2012-12-16T21:45:30.560 に答える
2

Visual Studioでは、両方とも符号付き32ビット整数であるため、同じ出力になりintますlong。これは、64ビットまたは32ビットのバイナリを構築しているかどうかに関係なく当てはまります(Windows 64ビットはLLP64モデルに従います) 。

Visual Studioではサイズとサイズがint32longビットと64ビットの間で変化しないため、提供したデータからどちらを構築しているかを判断する方法はありません。

于 2012-12-16T21:44:06.330 に答える
0

C ++標準によると、longは少なくともintと同じ大きさである必要があります。これは、longもintと同じサイズになる可能性があることを意味します。これは、同じタイプ(符号付きまたは符号なし)のlongとintの最小値と最大値が等しくなる可能性があることを意味します。

詳細(longとintだけでなく、他のタイプも)はこちら:https ://stackoverflow.com/a/271132/13760

ここにいくつかのより興味深い読み物があります:`long`は少なくとも32ビットであることが保証されていますか?

質問2に関する限り、プロジェクト設定をチェックして、Win32またはx64実行可能ファイルをビルドしているかどうかを確認する必要があります。

于 2012-12-16T22:33:47.920 に答える
0

特定の型の最大値はコンパイラーに依存します。C ++標準では、特定のビット数である必要があることなどについては何も述べられていません。

ただし、状態とは次のとおりです。

1 = sizeof(char)<=sizeof(short)<=sizeof(int)<=sizeof(long)<=sizeof(long long)

特定のサイズの整数を使用する場合は、「inttypes.h」を含め、int_8t、int16_t、int32_t、int64_tなどを使用することをお勧めします。

于 2012-12-16T21:49:10.567 に答える