[정답] 38. 정리하기 (연산자)

1- 다음리터럴상수로초기값을설정하는선언문중에서오류가있는것을고르시오.
a. char c = “hello”;   b. int i = ‘a’;      c. char c = 38;      d. char c = 0xC;
답: a
“hello”는 문자열이며 char 형식을 원소로 하는 배열이나 포인터 형식 변수로 사용할 수 있습니다.

2- 다음코드를수행했을때출력결과를예측하시오.
printf(“%d\n”, 8^8);
답:
^ 연산은 비트 자리별로 같으면 0이고 다르면 1로 계산하는 연산입니다.
좌항과 우항이 같은 수이므로 모든 자리는 같으며 따라서 결과도 모든 자리가 0입니다.

3- 다음코드를수행했을때출력결과를예측하시오.
printf(“%d\n”, 2<1<3);
답:
1
2<1<3 연산은 2<1을 수행한 후에 수행 결과인 0<3 을 비교합니다.
따라서 결과는 참인 1입니다.

4- 다음코드는부호없는정수형식의변수 a의상위 2바이트의값을변수 b에대입하는구문으로밑줄친곳에채우시오.
b = a ___16;
답:
>> 연산은 오른쪽으로 자리 이동하는 연산입니다.
상위 2바이트를 16자리 오른쪽으로 이동하면 원하는 값을 얻을 수 있습니다.

5- 다음코드에서문법적오류를찾고이유를설명하시오.

#include <stdio.h>
int main()
{
    int i = 0;
    int num = 0;
    printf("정수를 입력:");
    scanf("%d",&num);
    fflush(stdin);
    i + 3 = num;
    printf("i:%d num:%d \n",i, num);
    return 0;
}

답:
i+3=num;
i+3은 연산 결과이므로 상수입니다.
상수는 대입 연산자 좌항에 올 수 없습니다.