2011-12-28 3 views
0

가능한 중복 :
What does 'unsigned temp:3' means
what does this mean in c int a:16;?이 ':'연산자는 다음 C++ 코드에서 무엇을합니까? 그 이유는 무엇입니까?

는 내가 일하고 있어요 일부 C++ 코드에서이 struct을 가로 질러왔다. 누군가 콜론 운영자가 무엇을하고 있으며 어떻게 사용하는지 설명해 줄 수 있습니까?

struct MYMSG 
{ 
    unsigned short src : 4; 
    unsigned short dst : 11; 
    unsigned short tx : 1; 
}; 
+0

할당 할 비트 수. – cppcoder

+0

메모리의 16 비트 중 src 필드는 4 개의 LSB 만 사용합니까? 아니면 그것은 단지 4 비트를 할당합니까? – bporter

+0

@bporter 예 src는 4 비트 만 사용할 수 있지만 4 비트 만 사용합니다. 컴파일러가 사용하는 레이아웃은 구현에 따라 다르며 표준이 없습니다. – shf301

답변

1

위에서 언급했듯이 각 필드에 사용되는 비트 수입니다.

struct MYMSG 
{ 
    unsigned short src : 4; // allows values 0 - 15 
    unsigned short dst : 11; // allows values 0 - 2047 
    unsigned short tx : 1; // allows values 0 - 1 
}; 

이렇게하면 정렬을 해제해도 구조체를 패킹하는 효과가 있습니다. 이 구조체가 패딩되지 않은 경우 sizeof()을 호출하면 2가 반환됩니다 (8 비트/바이트 아키텍처에서).

이 경우 단일 unsigned short이 할당되고 비트 필드는 그 값 내에서 나뉩니다. 필드 중 하나의 범위를 벗어나는 값 (예 : src의 경우 16)은 특정 필드의 오버플로를 유발하지만 다른 필드의 값은 변경하지 않습니다 (dst의 값은 변경되지 않음).

struct T 
{ 
    unsigned long val : 4 
}; 

이 여전히 전체 unsigned long (대부분의 아키텍처에서 32 비트)를 할당하지만 0의 유효한 값을 제공하는 최초의 4 비트의 설정을 할 수 있습니다 - 15 :

은 약간 더 둔각을 예로 들어 보겠습니다.

+0

좋은 후속 질문입니다. 답변이 너무 복잡해서 답을 업데이트하지 않았습니다. – Chad

+0

모든 도움에 감사드립니다. 이것은 상당히 많은 것들을 지 웁니다. – bporter

관련 문제