1. ホーム
  2. c++

[解決済み] なぜ、この構造体のサイズは2ではなく3なのですか?

2023-03-16 14:03:31

疑問点

この構造体を定義しました。

typedef struct
{
    char A:3;
    char B:3;
    char C:3;
    char D:3;
    char E:3;
} col; 

sizeof(col) は 3 と出力していますが、2 ではないのでしょうか? もし、1 つの要素だけをコメントすれば sizeof 3ビットの5つの要素は15ビットに相当し、それは2バイト未満です。

このような構造を定義する際に、"内部サイズ"があるのでしょうか?私のこれまでの言語の概念から、私は3バイトではなく2バイトのサイズを期待していたので、私はちょうど明確化が必要です。

どのように解決するのですか?

を使用しているため char を使用しているため、コンパイラはビットをバイト単位でグループ化しようとし、各バイトに8ビット以上入れることができないため、1バイトに2つのフィールドしか格納できません。

構造体が使用するビットの合計は 15 であるため、これだけのデータを格納するための理想的なサイズは short .

#include <stdio.h>

typedef struct
{
  char A:3;
  char B:3;
  char C:3;
  char D:3;
  char E:3;
} col; 


typedef struct {
  short A:3;
  short B:3;
  short C:3;
  short D:3;
  short E:3;
} col2; 


int main(){

  printf("size of col: %lu\n", sizeof(col));
  printf("size of col2: %lu\n", sizeof(col2));

}

上記のコード(私のような64ビットプラットフォームの場合)は、確かに 2 を返します。よりも大きいものについては short よりも大きい場合、構造体は使用される型の 1 つ以上の要素を埋めることはありません。したがって、同じプラットフォームでは、構造体は int の場合は 4、 の場合は 8 になります。 long など。