
int x = 2;
char c = 'A'; // 'A'의 아스키코드는 65
#1
System.out.println(1 + x << 33);
#2
System.out.println('C' - c);
#3
System.out.println('5' - '0');
#4
System.out.println(c+1);
#5
System.out.println(++c);
#6
System.out.println(c++);
#7
System.out.println(c);
[ 정답 ]
#1. 6
#2. 2
#3. 5
#4. 66
#5. B
#6. B
#7. C
[ 해설 ]
1. ' 1 + x << 33'에서 x의 값이 2이므로 '1 + 2 << 33'가 된다. 덧셈연산자(+)보다 쉬프트연산자(<<)가 우선순위가 낮으므로 '3 << 33'이 된다. int 타입은 32 bit이므로 33번 쉬프트 하지 않고 1번만 쉬프트 한다. ' 3<< 1 '은 3에 '2의 1제곱'인 2를 곱하는 것과 같은 결과를 얻으므로 '3 * 2'가 되어 6을 얻는다.
2. int보다 작은 자료구조의 경우, 덧셈연산에서 int형으로 변환된다. 따라서 char인 'C'는 int로 변환되어 65+2 = 67, c는 'A'이므로 65가 된다. 따라서 67-65 = 2
3. '5', '0'도 마찬가지로 char이 int형으로 변환된다. 이 때, '5', '0'의 아스키코드는 실제 5,0처럼 5칸 차이이므로 '5'-'0' = 5
4. 'A' + 1은 'A'가 int형으로 변환되어 65+1 = 66
5. 단항연산자인 '++'은 이항연산자와 달리 int보다 작은 타입도 형변환을 하지 않는다. 이항연산자는 연산을 위해 '피연산자 스택(Operation stack)'을 사용하는데 이 과정에서 형변환이 발생하는 것이다. 단항연산자는 피연산자 스택을 사용하지 않으므로 형변환도 발생하지 않는다. 따라서 ++c의 경우, 기존 c인 'A'에 1을 더한 문자가 되므로 아스키 코드가 66인 문자 'B'가 출력된다.
6. c++는 c가 출력된 후, +1을 하게 되므로 B가 출력되고 c = 'C'가 된다.
7. C가 그대로 출력된다.
'웹 개발 > JAVA' 카테고리의 다른 글
[JAVA] 객체지향프로그래밍(1) (0) | 2024.10.29 |
---|---|
[JAVA] 알아두면 도움 되는 자바 문법(1) (0) | 2024.10.15 |