2

私は C++ を学んでいますが、データ型のサイズが一貫していないという事実にあまり慣れていません。int に何かが展開されているシステムに応じて、16 ビットまたは 32 ビットなどになる可能性があります。

そのため、特定のサイズで定義され、どのプラットフォームでもそのサイズを維持する、バイト、ワードなどのデータ型で独自のヘッダー ファイルを作成することをお勧めします。

2 つの質問です。まず、これでよろしいでしょうか?それとも、私が気付いていない他の問題を引き起こすのでしょうか? 次に、タイプを 8 ビットと定義するにはどうすればよいでしょうか。#define BYTE char とだけ言うことはできません。char はプラットフォームによって異なるためです。

4

5 に答える 5

4

幸いなことに、他の人もこれと同じ問題に気づいています。C99 および C++11 (コンパイラをこれら 2 つのモードのいずれかと互換性があるように設定します。コンパイラ設定にスイッチが必要です) では、ヘッダー stdint.h (C の場合) と cstdint (C++ の場合) が追加されました。の場合#include <cstdint>、int8_t、int16_t、int32_t、int64_t の型を取得し、署名されていないバージョンの au のプレフィックスが付いた同じものを取得します。プラットフォームがこれらのタイプをサポートしている場合、それらは他のいくつかのタイプとともにヘッダーで定義されます。

コンパイラがまだその標準をサポートしていない場合 (または、制御できない理由で C++03 にとどまることを余儀なくされている場合)、Boostもあります。

ただし、型のサイズを正確に気にする場合にのみ、これを使用する必要があります。ほとんどの場合、使い捨て変数には問題intありません。索引付けなどに使用する必要があります。unsignedsize_tstd::vector

于 2012-04-16T18:47:40.287 に答える
1

さらに良いことに、stdint.h で既に定義されているものを使用します。詳しくはこちらをご覧ください。同様の質問here

例: int32_t は常に 32 ビットです。

于 2012-04-16T18:43:51.590 に答える
1

最初に、物事のサイズが本当に気になるかどうかを判断する必要があります。ファイル内の行数をカウントするために int を使用している場合、それが 32 ビットか 64 ビットか本当に気にしますか? パックされたバイナリ データを扱う場合は BYTE や WORD などが必要ですが、通常は他の理由では必要ありません。だから、あなたは本当に重要ではない何かについて心配しているかもしれません.

于 2012-04-16T18:47:13.120 に答える
0

多くのライブラリには、一定サイズの型を持つための多くの typedef を持つ独自の .h があります。これは、移植可能なコードを作成するときに役立ち、現在使用しているプラ​​ットフォームのヘッダーに依存することを避けます。

于 2012-04-16T18:44:15.213 に答える
0

組み込みのデータ型の最小サイズのみを確認したい場合は、ヘッダーで std::numeric_limits を使用して確認できます。

std::numeric_limits<int>::digits

たとえば、符号ビットなしの int のビット数が得られます。と

std::numeric_limits<int>::max()

あなたに最大値を与えます。

于 2012-04-16T19:04:14.610 に答える