콘텐츠로 이동

3단원 숙제: 연산자

출력 예측은 실행 전 계산 과정을 남기세요. 코딩은 Main.javamain에서 작성합니다.


문제 1. 우선순위와 대입

다음 코드의 출력값과 x의 최종 값을 쓰세요.

int x = 5;
int y = x++ * 2 + --x;
boolean result = y % 3 == 1 && x == 5 || false;
System.out.println("x=" + x);
System.out.println("y=" + y);
System.out.println(result);

문제 2. 증감 연산자의 위치

다음 각 줄을 독립적으로 실행한다고 할 때 출력값과 n의 최종 값을 쓰세요.

 int n = 3; System.out.println(n++ + n);
 int n = 3; System.out.println(++n + n);
 int n = 3; System.out.println(n-- - --n);

문제 3. 산술 변환과 오버플로우

아래 네 문장의 결과 또는 컴파일 오류를 쓰고 이유를 설명하세요.

 byte a = 10, b = 20;
   byte c = a + b;
 byte c = (byte)(a + b);
 int n = 1_500_000_000 * 2;
 long m = 1_500_000_000 * 2L;

문제 4. 나머지와 부호

다음 출력값을 쓰고, 자바의 정수 나눗셈에서 나머지의 부호가 무엇을 따르는지 설명하세요.

System.out.println(-17 / 5);
System.out.println(-17 % 5);
System.out.println(17 % -5);

문제 5. 단락 평가

다음 코드가 출력하는 순서를 쓰세요. check()가 호출되는지에 주의하세요.

static boolean check() {
    System.out.println("check");
    return true;
}

boolean a = false && check();
boolean b = true || check();
boolean c = !false && check();
System.out.println(a + " " + b + " " + c);

문제 6. 비트 연산과 시프트

int n = 0b0011_1100;일 때 아래 각 식의 10진수와 8비트 2진 표현을 쓰세요.

 n & 0b0000_1111
 n | 0b0000_0011
 n ^ 0b1111_1111
 n << 2
 n >> 3

문제 7. 조건/복합 대입 연산자

다음 출력값을 쓰세요. 특히 byte의 복합 대입에서 자동 형변환이 일어나는 이유를 설명하세요.

byte b = 10;
b += 120;
int score = 81;
String grade = score >= 90 ? "A" : score >= 80 ? "B" : "C";
System.out.println(b);
System.out.println(grade);

문제 8. 직접 코딩 - 비트 상태 리포트

0-255 범위의 정수 하나를 입력받아 다음 상태를 출력하세요. 0번째 비트는 최하위 비트입니다.

  • bit0, bit3, bit7이 각각 0인지 1인지 출력
  • 비트 3을 1로 만든 값과, 비트 0을 뒤집은 값을 함께 출력
  • 조건문 없이 &, |, ^, <<, >>를 사용
Value: 18
bit0=0, bit3=0, bit7=0
set bit3 : 26
flip bit0: 19