2025년, 코딩은 선택이 아닌 필수!

2025년 모든 학교에서 코딩이 시작 됩니다. 먼저 준비하는 사람만이 기술을 선도해 갑니다~

강의자료/정보영재

2018년 정보올림피아드 지역대회 초등부 17번 문제 풀이

원당컴퓨터학원 2018. 4. 18. 07:03

다음 프로그램의 출력결과는 무엇인가?


 

int x = 'A' + 128;

x += 129;

printf("%c\n", x);



정답은 B입니다.


저희 아이들 대부분 정답 없음을 선택했네요...ㅠ.ㅠ


실제로 아스키값은 0~255 까지 나오는 것을 알고 있어서..

'A'의 아스키값이 65 이니까 x = 65 + 128 + 129 = 322 가 나와서 아스키값 범위를 넘어 가기 때문에 정답 없음을 선택 했는데요...ㅠ.ㅠ


위와 같은 코드는 시리얼 통신 프로그래밍에서 데이터가 깨졌는지 안깨졌는지 확인하기 위해 마지막 데이터에 체크썸을 두는데 이때 사용하는 체크썸을 구할 때 많이 사용하는 프로그래밍 기법이네요.


일반적으로 체크썸은 데이터 패킷을 모두 합 한 다음에 1바이트로 변환해서 체크썸을 두는 경우가 많거든요.


원리는 다음과 같습니다.


x는 int 타입이기 때문에 4byte 입니다.


따라서 322는 이진수로 바꾸면 

|0000|0000|0000|0000|0000|0001|0100|0010|

위와 같이 32bit로 표현될수 있습니다.

이것을 char 타입으로 변환하면 1byte만 사용하기 때문에 주황색 부분인 |0100|0010| 이부분만 가져 오게 됩니다.


따라서 이것을 10진수값으로 표현하면 66 이고 이것을 ASCII 값으로 변환하면 'B' 가 되는 것입니다.


결국은 322 % 256 = 66 의 값을 얻게 되는 것입니다.




정보올림피아드 문제 풀이 리스트 정리



사업자 정보 표시
원당컴퓨터학원 | 기희경 | 인천 서구 당하동 1028-2 장원프라자 502호 | 사업자 등록번호 : 301-96-83080 | TEL : 032-565-5497 | Mail : icon001@naver.com | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기