3단원 숙제 정답: 연산자¶
문제 1. 우선순위와 대입¶
x=5
y=15
false
x++는 5를 사용한 뒤 6이 되고, --x가 x를 다시 5로 만든다. y=5*2+5=15이며 15 % 3 == 1은 거짓이다.
문제 2. 증감 연산자의 위치¶
| 항목 | 출력 | 최종 n |
|---|---|---|
| ① | 7 | 4 |
| ② | 8 | 4 |
| ③ | 1 | 1 |
후위형은 값을 먼저 사용하고 증감하며, 전위형은 먼저 증감한 값을 사용한다.
문제 3. 산술 변환과 오버플로우¶
| 항목 | 결과 | 이유 |
|---|---|---|
| ① | 컴파일 오류 | byte + byte는 int로 산술 변환된다. |
| ② | 30 | 명시적으로 byte로 변환했다. |
| ③ | -1294967296 | int 범위를 넘은 곱셈이 먼저 발생했다. |
| ④ | 3000000000 | 한 피연산자가 long이므로 long 곱셈이다. |
문제 4. 나머지와 부호¶
-3
-2
2
정수 나눗셈은 0 쪽으로 버림한다. 나머지 %의 부호는 왼쪽 피연산자(피제수)의 부호를 따른다.
문제 5. 단락 평가¶
check
false true true
false && ...와 true || ...에서는 오른쪽을 평가하지 않는다. 세 번째 식만 check()를 호출한다.
문제 6. 비트 연산과 시프트¶
n은 60, 즉 00111100이다.
| 식 | 10진수 | 8비트 표현 |
|---|---|---|
| ① | 12 | 00001100 |
| ② | 63 | 00111111 |
| ③ | 195 | 11000011 |
| ④ | 240 | 11110000 |
| ⑤ | 7 | 00000111 |
문제 7. 조건/복합 대입 연산자¶
-126
B
b += 120은 내부적으로 형변환을 포함한 b = (byte)(b + 120)처럼 동작한다. 130의 8비트 표현은 -126이다. 중첩 조건 연산자는 오른쪽 결합으로 평가된다.
문제 8. 비트 상태 리포트¶
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Value: ");
int value = sc.nextInt();
int bit0 = (value >> 0) & 1;
int bit3 = (value >> 3) & 1;
int bit7 = (value >> 7) & 1;
System.out.printf("bit0=%d, bit3=%d, bit7=%d%n", bit0, bit3, bit7);
System.out.printf("set bit3 : %d%n", value | (1 << 3));
System.out.printf("flip bit0: %d%n", value ^ 1);
}
}
(value >> k) & 1은 k번째 비트를 최하위 자리로 옮긴 뒤 0 또는 1만 남긴다.