0

重複の可能性:
「unsignedtemp:3」とはどういう意味ですか

struct定義は次のようになります。

typedef struct
{   
    uint32_t length : 8;  
    uint32_t offset : 24;
    uint32_t type : 8;
} A;

:8私はこれまでこの種の定義を見たことがありませんが、それはどういう意味:24ですか?

4

3 に答える 3

6

それはビットフィールドを定義しています。これは、コンパイラにlength8ビット、offset24ビット、および8ビットでtypeあることを通知します。

于 2012-07-20T09:37:50.250 に答える
3

次のリンクを参照してください。それらはビットフィールドです。http://www.cs.cf.ac.uk/Dave/C/node13.html
http://en.wikipedia.org/wiki/Bit_field

#include <stdio.h>

typedef unsigned int uint32_t;

#pragma pack(push, 1)
typedef struct
{
    uint32_t length : 8;
    uint32_t offset : 24;
    uint32_t type : 8;
} A;

typedef struct
{
    uint32_t length;
    uint32_t offset;
    uint32_t type;
} B;
#pragma pack(pop)

int main()
{
  printf("\n Size of Struct: A:%d   B:%d", sizeof(A), sizeof(B));
  return 0;
}

構造体Aのサイズは5バイトになりますが、Bのサイズは12バイトになります。

于 2012-07-20T09:39:07.980 に答える
1

この表記は、ビットフィールド、つまりその構造変数のビット数のサイズを定義します。

于 2012-07-20T09:43:44.930 に答える