3단원 숙제: 연산자¶
출력 예측은 실행 전 계산 과정을 남기세요. 코딩은
Main.java의main에서 작성합니다.
문제 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