Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[4782] Re:[생초보]정수형 출력할때요..
김시환 [godson2] 1351 읽음    2004-11-22 22:44
char ch = 255 를 넣으면 왜  1101 0101 이 된다고 생각한 것인가요?
누가 알려줬는지는 모르지만 정말 이해할 수 없는 값이네요..

프로그램에서는 일반적으로 255처럼 10진수를 사용하여 표현하지만

컴퓨터는 내부적으로 모든 표현을 이진수로 하기 때문에 255도 이진수인 1111 1111 로 하여
ch 가 가리키는 메모리에 그대로 매핑을 하죠

int i = 255 ;  char ch = 255

i = 0000 0000 1111 1111
ch = 1111 1111
위처럼 저장이 되는 것입니다.

char 형의 변수는 8비트 크기를 가지면서 최상위 비트를 부호 비트로 사용합니다.
즉   s xxx xxxx  <- 형식에서 맨 앞의  s에 해당하는 비트가 부호가 됩니다. (1:- , 0:+)

그리고 char ch = 255 를 하면 ch 변수에는 정확히 1 111 1111 의 값이 저장됩니다.

그럼 왜 255(1 111 1111)가 -1 이 되는지 살펴보면

-1 = 0 - 1 입니다.
8비트 메모리 이진 연산을 해 봅시다.

       0000 0000 - 0000 0001  을 하면 2진수의 감산 연산은 2의 보수 덧셈으로 표현되죠
       
       0000 0001 의 2의 보수는 1111 1111 이 됩니다. 

      그럼 0000 0000 + 1111 1111 로 표현되고 결국 답은 1111 1111 이 됩니다.

그러니 1111 1111 은 -1의 값이 되겠죠...

반대로 -1 + 1 = 0 이죠...
8비트 메모리 이진 연산을 해 봅시다.

    1111 1111 + 0000 0001 = 0000 0000 = 0
자 위 연산에서 질문이 나옵니다.    1111 1111 + 0000 0001 = 1 0000 0000  이 아닌가요 라고...
맞습니다. 하지만 위에 제가 분명히 명시 했죠 8비트 메모리 연산이라고...
따라서 맨앞의 1은 의미가 없어지죠...


하지만 unsigned char ch = 255 는 결과가 달라집니다. 이때는 최상위 비트가 부호를
표현하지 않고 8비트 모두를 수로 표현 하기 때문에
1111 1111 = 255 가 됩니다.

이정도로 이해가 잘 안돼리라 생각됩니다.
자세한것은 전자계산기 개론 같은 책을 보시면 더 이해하기 쉬울거 같네요...

+ -

관련 글 리스트
4780 [생초보]정수형 출력할때요.. (´∇`)♪ 1233 2004/11/22
4782     Re:[생초보]정수형 출력할때요.. 김시환 1351 2004/11/22
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.