22018, 1/1101 회원가입  로그인  
   allsky3
   마이크로 컨트롤러에 대해 좀 아시는분 .. 질문좀요

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=31294 [복사]


컴파일러 옵션으로 -funsigned-char가 설정된 상황에서 다음 프로그램을 싱행하니 x=255가 출력되었습니다. 왜 -1이 출력되지 않았는지 그 이유좀 설명해주세요.



#include<stdio.h>



int main(void)

{

char x;

x=-1;

printf("x=%d",x);



return 0;

}



이해가 안되네요 설명좀용


  Hit : 7973     Date : 2013/10/15 04:48



    
$Zero 마이크로 컨트롤러에 대해선 잘 모르지만, 컴파일러에 사용한 옵션과 결과값의 연관성이 유추되어 답변 달아봅니다.
char 형 자료형은 8byte를 사용하는 자료형입니다 .
이중 1byte를 부호비트로 사용하기때문에 실제 표현 가능한 수는 -127~+128이 됩니다.
즉, 애초에 255란 값을 표현할 수 없는 자료형입니다.
근데 char형으로 255값을 표현할 수 있는 방법이 있습니다.
부호비트까지 정수표현에 사용하라는 unsigned를 선언하시면 됩니다.
unsigned char일 경우 0~255의 값을 표현할 수 있게 됩니다.
컴파일러 옵션으로 주신 문구에 unsigned char이 있는걸로보아 char형을 기본적으로 unsigned char로 보겠다는 의미 같습니다.
-1의 경우 부호비트를 포함한 8비트가 전부 11111111의 값입니다. 이 값을 부호비트가 무시되는 unsigned char로 넣으면 255가 됩니다.
따라서 위에서 사용된 char는 unsigned char로 인식되었다고 볼 수 있겠네요
2013/10/16  
nsh009 제로님이 헷갈리신듯 합니다. bit 입니다~ 2013/10/27  
$Zero nsh009 // 아 8byte라고 했군요 -_-ㅋ.. 8bit입니다 !!
지적 감사합니다
2013/11/06