다음 프로그램의 출력결과는 무엇인가?
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 | 통신판매신고번호 : 호 | 사이버몰의 이용약관 바로가기
'강의자료 > 정보영재' 카테고리의 다른 글
정보올림피아드 전국대회에서 장려상 확보하는 방법(0점을 면하는 방법) (3) | 2018.05.02 |
---|---|
2004년 정보올림피아드 전국대회 초등 2번 줄자접기 문제 풀이 (3) | 2018.04.21 |
2017년 지역대회 고등부 27번 문제 풀이 (3) | 2018.04.04 |
순열,조합,중복 조합의 원리 (3) | 2018.03.21 |
정보올림피아드 2017년 지역대회 고등부 7번문제 풀이 (2) | 2018.03.10 |