programing

구조물 또는 유니언의 'unsigned temp:3'은 무엇을 의미합니까?

yoursource 2022. 7. 17. 11:08
반응형

구조물 또는 유니언의 'unsigned temp:3'은 무엇을 의미합니까?

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

나는 JNA를 이용하여 자바에 C 구조물을 지도화하려 한다.나는 처음 보는 것을 우연히 만났다.

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)입니다.

사이즈는 항상 부호 없는 xxx:yy; construct의 각 그룹에 대해 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

반응형