2014-11-13 2 views
-1
#include<stdio.h> 

int main(){ 

    struct value 
    { 
     int bit1:1; 
     int bit2:4; 
     int bit3:4; 
    } 
    bit ={1,2,2}; 
    printf("%d %d %d \n",bit.bit1,bit.bit2,bit.bit3); 

    return 0; 
} 

출력을위한 출력을 설명해주십시오 : -1 2 2비트 필드 1

안녕하세요,이 음의 값오고있다 bitfields.How 구조를 이해 할 수 없습니다입니다.

+0

이 bit.bit1의 출력 값을 설명해주십시오 :

는 비트 필드에 대한 자세한 내용을 알고하려면이 링크를 확인하시기 바랍니다. – sv1

+1

무엇이 문제입니까? –

+0

안녕하세요, 구조 비트 필드를 이해할 수 없습니다. 부정적인 가치가 올 것입니다. – sv1

답변

3
int bits:2; 

저장할 수 00 (1), 01 (1), 10 (-2), 11 (-1)

unsigned int bits:2; 

00를 저장할 수있는 서명을 위해 2S 보체계 가정 * (0), 01 (1), 10 (2), 11 (3)

표현할 수있는 두 가지 유형의 비트 표현은 동일하지만 해석이 다릅니다.

귀하는 :1을 사용하고 있으므로 0 또는 -1을 저장할 수 있으므로 음수 출력이 가능합니다. int :1으로 표시 할 수없는 1을 저장하려고하므로 출력이 놀랍습니다. 테이크 아웃은하지 마라.

결론 거의 항상 비트 필드 멤버에 unsigned을 사용하십시오. 같은 구조를 다시 작성 구조에

struct value 
{ 
    unsigned int bit1:1; 
    unsigned int bit2:4; 
    unsigned int bit3:4; 
}; 
+1

0 또는 -1, 1을 저장할 수 있습니다. – Kevin

+0

@ 모토 : 비트 필드 작업을 설명해 주시겠습니까? 나는 geeksforgeeks.org도 언급했습니다. – sv1

+0

@shaina 이것은 광범위한 주제입니다. 나는 더 나은 손을 잡기 위해 C 책이나 약간의 [기초적인 튜토리얼] (http://www.tutorialspoint.com/cprogramming/c_bit_fields.htm)을 제안 할 것이다. –

2

bit1int이다. unsigned int과 같이 int 앞에 unsigned을 지정하지 않으면 signed 정수로 처리됩니다. bit1의 경우 크기를 1 비트로 언급 했으므로 bit1의 값은 2 개뿐입니다! 0 및 1. bit1에 1을 지정하면 형식이 int이므로 -1이 인쇄됩니다. 우리가 알고있는 것처럼,변수의 경우 MSB 비트가 설정되면 음수입니다. bit2bit3은 크기가 4 비트이므로 값은 0에서 15 (0b1111)까지 지정할 수 있습니다. 음수 값이 왜 라니 http://www.tutorialspoint.com/cprogramming/c_bit_fields.htm