Nice programing

구조체 또는 공용체에서 'unsigned temp : 3'은 무엇을 의미합니까?

nicepro 2020. 12. 25. 22:55
반응형

구조체 또는 공용체에서 'unsigned temp : 3'은 무엇을 의미합니까?


중복 가능성 :
이 C ++ 코드는 무엇을 의미합니까?

JNA를 사용하여 C 구조를 Java에 매핑하려고합니다. 본 적이없는 무언가를 발견했습니다.

struct다음과 같이 정의는 다음과 같습니다

struct op 
{
    unsigned op_type:9;  //---> what does this mean? 
    unsigned op_opt:1; 
    unsigned op_latefree:1; 
    unsigned op_latefreed:1; 
    unsigned op_attached:1; 
    unsigned op_spare:3; 
    U8 op_flags; 
    U8 op_private;
};

일부 변수가 다음과 같이 정의되는 것을 볼 수 있으며 unsigned op_attached:1그 의미가 무엇인지 잘 모르겠습니다. 이 특정 변수에 할당 할 바이트 수에 영향을 미칠까요?


이 구조는 각 필드의 길이를 비트 단위로 지정합니다.

이것의 장점 sizeof(op)은 조심하면를 제어 할 수 있다는 것 입니다. 구조의 크기는 내부 필드 크기의 합계가됩니다.

귀하의 경우 op의 크기는 32 비트 (즉, sizeof(op)4)입니다.

크기는 항상 모든 unsigned xxx : yy 그룹에 대해 다음 8의 배수로 반올림됩니다. 구성.

그것의 의미는:

struct A
{
    unsigned a: 4;    //  4 bits
    unsigned b: 4;    // +4 bits, same group, (4+4 is rounded to 8 bits)
    unsigned char c;  // +8 bits
};
//                    sizeof(A) = 2 (16 bits)

struct B
{
    unsigned a: 4;    //  4 bits
    unsigned b: 1;    // +1 bit, same group, (4+1 is rounded to 8 bits)
    unsigned char c;  // +8 bits
    unsigned d: 7;    // + 7 bits
};
//                    sizeof(B) = 3 (4+1 rounded to 8 + 8 + 7 = 23, rounded to 24)

나는 이것을 올바르게 기억하고 있는지 잘 모르겠지만 나는 그것을 옳았다 고 생각한다.


비트 필드를 선언 합니다 . 콜론 뒤의 숫자는 필드의 길이를 비트 단위로 나타냅니다 (즉,이를 나타내는 데 사용되는 비트 수).


unsigned op_type:9;

op_type이 9 비트의 정수 변수임을 의미합니다.


정수 유형의 콜론 수정자는 int가 차지해야하는 비트 수를 지정합니다.

참조 URL : https://stackoverflow.com/questions/2950029/what-does-unsigned-temp3-in-a-struct-or-union-mean

반응형