강의실/정보영재

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


 

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 의 값을 얻게 되는 것입니다.


그나 저나 이번 시험은 난이도가 너무 낮아 져서 실력때문이라기 보다도 실수를 누가 적게 했느냐가 관건이라고들 하는데요...


정보올림피아드 준비를 하느라고 너무 고생한 우리 아이들 실수를 하지 않고 풀수 있는 문제는 모두 맞추었으면 하는 바램과 기도를 해 보게 되네요...



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



이 장소를 Daum지도에서 확인해보세요.
인천 서구 당하동 1028-2 장원프라자 502호 | 원당컴퓨터학원
도움말 Daum 지도
3 0
  • 휴식같은 친구 2018.04.18 12:44 신고    

    정보올림피아드 수준이 꽤 높은것 같네요.
    전산전공인 저도...ㅠ
    어느학년 수준인지 궁금합니다.ㅎ

  • 핑구야 날자 2018.04.19 06:42 신고    

    올림피아드를 준비하는 분들에게 도움이 많이 되겠어요

  • 버블프라이스 2018.04.28 21:16 신고    

    2018년 정보올림피아드 지역대회 초등부 17번 문제 풀이를 해주셔서 해당 시험을 준비하는 학생분들이게 많은 도움이 될 것 같습니다.
    이 글을 읽은 학생분들은 시험에서 좋은 결과 있길 바랍니다