-
[문제해설] C 언어에서 x의 연산 결과는?전자계산기조직응용기사/필기 기출문제 해설 2021. 8. 21. 21:12반응형
전자계산기조직응용기사 필기 기출문제 (1과목 전자계산기프로그래밍-C언어)
C 언어에서 x의 연산 결과는?
#include <stdio.h>
int main( ) {
unsigned char x=7;
x=x<<8;
printf("%d", x);
return 0;
}① 0 ② 56
③ 192 ④ 256
- 문제 해설 -
반복문이나 분기문도 없는 단순한 알고리즘의 C언어 코드 문제이지만, 코드의 이해와 시프트 연산을 알고 있어야 정확히 풀 수 있는 문제입니다.
코드를 살펴보겠습니다.
1 #include <stdio.h> 2 int main( ) { 3 unsigned char x=7; 4 x=x<<8; 5 printf("%d", x); 6 return 0; 7 }
3번 라인 : unsigned char 자료형으로 변수 x를 선언하며 정수 7로 초기화합니다.
먼저 C언어 자료형들의 signed와 unsigned에 대해 먼저 설명하겠습니다.
기본적이라서 생략 가능한 signed는 부호를 사용한다는 말입니다.
int a;
위 코드는 우리가 일반적으로 사용하는 정수형 변수를 선언한다는 의미입니다. 이 코드는
signed int a;
이렇게 써도 됩니다. 흔히들 signed는 생략해서 사용합니다.
이와 반대로 unsigned는 부호를 사용하지 않는 것입니다.
unsigned int a;
이와 같이 코딩하면 부호를 사용하겠다는 말입니다.
지금까지 이야기하고 있는 부호는 당연히 +,-, 즉 양수와 음수를 말하고 있습니다.
그럼 signed형과 unsigned를 비교해보겠습니다. 어떤 정수 자료형이 4 비트라고 가정해보면 코드표는 다음과 같습니다.
2진수 signed unsigned 0000 0 0 0001 1 1 0010 2 2 0011 3 3 0100 4 4 0101 5 5 0110 6 6 0111 7 7 1000 -8 8 1001 -7 9 1010 -6 10 1011 -5 11 1100 -4 12 1101 -3 13 1110 -2 14 1111 -1 15 위 표는 논리회로를 공부하셨다면, 상당히 익숙하실 겁니다. signed형의 경우 부호화된 2의 보수 코드라는 것을 아셔야 됩니다.
unsigned형을 사용하는 부호가 필요 없을 시 절댓값의 표현 범위가 2배 정도로 커지기 때문입니다.
그리고 char형은(signed, unsigned 둘 다) 그 크기가 1byte입니다.
그럼 3번 라인이 실행되면 8bit(1byte)의 메모리가 확보되며, 초기값 7이 다음과 같이 저장됩니다.
0 0 0 0 0 1 1 1 4번 라인 : '<<'는 왼쪽 비트 이동 연산자, 즉 레프트 쉬프트(left shift) 연산을 수행합니다. 참고로 '>>'는 오른쪽 비트 이동 연산자입니다.
'x=x<<8;'는 비트들이 왼쪽으로 전부 옮겨지면서, 빈칸에는 모두 0으로 채우는 동작을 0번 수행합니다. 그러면 결과는 아래와 같이 모두 0으로 채워지게 됩니다.
0 0 0 0 0 0 0 0 5번 라인 : 그냥 변수 x의 값을 정수형으로 출력하는 명령어입니다. 4번 라인에서 비트 이동한 후 값은 0이니, 출력 값은 당연히 0이 됩니다.
정답은 1번입니다.
어려운 문제는 아니나, C언어 자료형들의 코드와 부호화된 2의 보수를 연관하여 공부하시길 바랍니다.
https://youtube.com/playlist?list=PLboXycXmAIDuukQ2A6EvMZI-x1IMy3Xc-
반응형'전자계산기조직응용기사 > 필기 기출문제 해설' 카테고리의 다른 글