2017-03-20 9 views
0

는 I는 다음의 구조를 정의 :베이스,C에서 n 비트를 사용하여 밑이 2 인 모든 n 비트 값을 어떻게 나타낼 수 있습니까?

typedef struct 
{ 
    int unused :8; 
    int group :2; 
    int opcode :4; 
    int source_mode :2; 
    int dest_mode :2; 
    int are  :2; 

}first_word; 

난 각 필드는이 구조에서 수신 된 비트를 이용하여 표현 될 수있는 가능한 모든 값을 보유 할 수 있도록하려는을 2

예를 들어 2 비트를 포함하는 필드의

가능한 값은 다음과 같다 :

00 /*0 in base 2*/ 
01 /*1 in base 2*/ 
10 /*2 in base 2*/ 
11 /* 3 in base 2 */ 

소수점 10 때문에 담당자 인 기본이 4 비트를 사용하여 분개, 나는이 작업을 수행 할 수 없습니다

int main() 
{ 
    first_word fw; 
    fw.group = 10; 
    return 0; 
} 

그렇지 않으면 때문에, 내가 얻을 것이라고 다음과 같은 오류 : 마찬가지로

main.c: In function ‘main’: 
main.c:21:17: warning: overflow in implicit constant conversion [-Woverflow] 
     fw.group = 10; 
       ^~ 

을, 나는 오피 모두 보유 할 수있게하려면 가능한 값은 4 비트를 사용합니다.

어떻게하면됩니까?

+0

int 그룹 : 4;'...... 나에게 명확하지 않다 ... – LPs

+0

그룹에 2 비트만 들어 있기 때문에 비트 필드 @LP를 사용한다. – Float

+2

필드를 서명하지 않고 시작할 수있다. 어쨌든 당신이 주장하는 것입니다. – StoryTeller

답변

2

은 진수가 it.Like는 group에 저장하기 전에 2에 진 10 변환 저장하기 전에 진수로 변환합니다.

나는 이것을 논평하고 싶었지만 낮은 평판 때문에 couldnt했다.

편집 -C++을 사용하는 경우 0b을 사용하여 직접 변환 할 수 있습니다. 예 -

0b1 이진 1 또는 10 진수 0

0b10 이진 10 deciaml 2

0b100 이진 100 진수 4

또는 표준 C에서 사용자가 기능을 할 수있는 수단을 의미 의미 이 경우 10과 같은 binary format 정수가 사용되고 변환 된 십진수 값 2을 반환합니다. 나중에 시프트와 같은 bitwisee 연산을 사용하여 비트를 검색 할 수 있습니다.

+0

감사합니다. 아직 이해가 안된다고 생각합니다. 사례를 제공해 주시겠습니까? @괴물 – Float