では、char 型のプリミティブのサイズが 1 バイトであることがわかりますか? カスタム サイズのプリミティブを作成するにはどうすればよいですか? サイズが 4 バイトの int の代わりに、サイズが 16 の int を作成します。これを行う方法はありますか? それを回避する方法はありますか?
4 に答える
なぜこれを行うのかによって異なります。通常、8 ビット未満の型は使用できません。これは、アーキテクチャのアドレス指定可能な単位であるためです。ただし、構造体を使用してさまざまな長さを定義できます。
struct s {
unsigned int a : 4; // a is 4 bits
unsigned int b : 4; // b is 4 bits
unsigned int c : 16; // c is 16 bits
};
ただし、構造体が 24 ビット長になるという保証はありません。また、これによりエンディアンの問題が発生する可能性があります。可能な場合は、uint16_t などのシステムに依存しない型を使用することをお勧めします。ビット単位の演算子とビット シフトを使用して、非常に具体的に操作することもできます。
通常は、関心のあるデータを表す構造体を作成するだけです。16 バイトのデータの場合は、多数の小さな型の集合体であるか、ネイティブの 16 バイト整数型を持つプロセッサで作業しています。
非常に大きな数値を表現しようとしている場合は、任意のサイズの数値を処理する特別なライブラリを見つける必要がある場合があります。
新しい型を作りたい場合は、それを typedef します。サイズを 16 バイトにする場合は、16 バイトのメンバー データを含む構造体を typedef します。システムのアラインメントのニーズに合わせて、多くの場合、コンパイラがパディングを行うことに注意してください。1 バイトの構造体が 1 バイトのままになることはめったにありません。