콘텐츠로 이동

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 + byteint로 산술 변환된다.
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만 남긴다.