Java] Operator Training

Problem

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
int x = 2;
int y = 5;
char c = 'A'; //65

// 1번
System.out.println(1 + x << 33);
// 2번
System.out.println(y += 10 - x++);
// 3번
System.out.println(x += 2);
// 4번
System.out.println('C' - c);
// 5번
System.out.println('5' - '0');
// 6번
System.out.println(c+1);
// 7번
System.out.println(++c);
// 8번
System.out.println(c++);
// 9번
System.out.println(c);
# 답
1. 6
2. 13
3. 5
4. 2
5. 5
6. 66
7. B
8. B
9. C

1번. 1 + x << 33

+와 += 의 연산자 우선순위가 다르다.

+는 비트 쉬프트 연산자보다 우선순위가 빠르지만, +=는 느리다.

(1 + 2) << 33으로 나타낼 수 있고, int의 비트는 32까지이므로 결국은 1번 왼쪽으로 보낸 결과

즉, (1 + 2) * 2의 결과와 같다고 보면 된다.

답: 6

2번. y += 10 - x++

y += 10이 오류가 날 것이라고 예상하였지만 아니다.

값을 초기화하면서 출력이 가능하다.

5 - 2 + 10 의 결과인 13이 나온다.

x++은 후위 증감 연산자로 후위식은 해당 값 처리 후, 증가된다.

답: 13

3번. x += 2

위에서 후위 증가되었다는 것을 잊어서는 안된다.

답: 5

4번. ‘C’ - c

A와 C는 2개의 차이가 있다.

답: 2

5번. ‘5’ - ‘0’

5와 0은 5개의 차이가 있다.

답: 5

6번. c+1

c는 ‘A’이고 A는 int형으로 65의 값을 가지고 있다.

Promotion(타입 확장)이 이뤄져서 int형의 값이 나오게 된다.

답: 66

7번. ++c

c가 가지고 있는 값에서 전위 증가로 1을 더한 값을 만들어 주면 된다.

c는 char type이기에 계산을 위해서 65 + 1이 된 int형을 가졌다가 c 변수가 가지고 있는 char형으로 Casting(타입 축소)가 이뤄진다.

답: B

8번. c++

위와 비슷하나 후위 증가는 해당 값이 처리되고 나서 증가하기에 현재 나오는 값의 변화는 생기지 않는다.

답: B

9번. c

위에서 후위 증가가 이뤄졌기 때문에 1을 더한 값이 나온다.

7번과 같은 이유로 char 타입이 나온다.

답: C