BASIC4MCU | 질문게시판 | C언어 10진수 정수형 변환문자열 질문
페이지 정보
작성자 master 작성일2018-08-24 14:35 조회4,194회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=2821
본문
c언어를 공부하고있는 한 학생입니다 이해가 가지 않는 부분이 있어 질문드립니다.char 자료형은 1바이트 크기로 정수형 상수를 저장할 수 있다고 배웠습니다.signed char a = 128;printf("a의 값은 : %d",a);는 signed 이고 128은 비트로 표현하면 1000 0000이므로-1이 출력되는 것으로 알고있습니다. 실제로도 그렇게 나왔구요unsigned char a = 128;printf("a의 값은 : %u",a); 를 출력하면unsigned 이므로 MSB를 부호비트로 생각하지 않기에 그냥 128이 출력된다고 알고있고 또 그렇게 나왔습니다.만약signed char a = 128;printf("a의 값은 : %u",a);이런식으로 하면 출력값이 4294967168 이라고 나옵니다.물론 signed 형이므로 %d를 사용해야한다고 알고있습니다.하지만unsigned char a = 128;printf("a의 값은 : %d",a);는 왜 정상적으로 128이 나오는지 모르겠습니다.왜 빨간 부분은 오류가 나오고 파란부분은 정상적으로 작동되는지 모르겠습니다.%u가 MSB를 부호비트로 인식하지 않는다고 하는데 그러면 빨간부분 중
4294967168가 아닌 128이 출력되야하는 것이 아닐까요?또 %d는 MSB를 부호비트로 인식하는데 왜 128로 출력이 되는걸까요?//printf()함수 인수의 기본 데이터형은 int입니다.signed char a = 128;printf("a의 값은 : %u",a);1바이트 0x80 을 4바이트로 변환하면 0xFFFFFF80 이 되고unsigned int로 출력하면 4294967168 이 맞습니다.//signed char a = 128;printf("a의 값은 : %u",(unsigned int)a);128로 보고 싶다면 형변환 해주면 됩니다.//signed char 형의 범위는 -128~127까지입니다.signed char a = 128;입력값은 데이터형의 범위를 넘은 것이므로 잘못 된 입력이지만printf("a의 값은 : %d",a);-1이 아닌 -128이 출력됩니다.왜 -1이 출력된다는 것인지 이해가 안가는군요-1은1바이트로는 0xFF4바이트로는 0xFFFFFFFF다시 확인해보세요//1을 2의 보수를 취하면 -1이 됩니다.00000001 - 111111110 - 1의보수11111111 - 2의보수0x01을 2의 보수를 취하면 0xFF가 됩니다.0xFF가 -1이라는 얘기죠0x80은 -1이 될 수 없습니다.
댓글 0
조회수 4,194등록된 댓글이 없습니다.