2단원 쪽지시험 정답: 변수, 기본형, 진법, 형변환¶
문제 1. 빈칸 채우기¶
① long distance = 3_000_000_000L;
② float ratio = 0.75f;
③ final int MINUTES = 60;
①은 L 접미사가 붙은 long 리터럴이다. ②에서 소수 리터럴은 기본적으로 double이므로 f 접미사가 필요하다. ③ 상수명은 관례상 대문자다.
문제 2. 출력 추적¶
33
6
3
첫 줄은 빈 문자열이 먼저 와서 문자열 결합이 되고, 둘째 줄은 정수 덧셈이 먼저 일어난다. 셋째 줄은 '0'에 3을 더한 코드값을 char로 변환한다.
문제 3. 형식화 출력¶
[008][OK ][1.24]
%03d는 3칸을 0으로 채우며, %-4s는 왼쪽 정렬한다. %.2f는 소수 셋째 자리에서 반올림한다.
문제 4. 진법¶
0b111010 = 58(10) = 0x3A
32 + 16 + 8 + 2 = 58이고, 4비트씩 묶으면 0011 1010이므로 3A다.
문제 5. 2의 보수¶
1111 0110 = -10
음수이므로 비트를 반전하면 0000 1001, 1을 더하면 0000 1010이다. 절댓값이 10이므로 -10이다.
문제 6. 오류 판단¶
다, 마
| 문장 | 판단 | 이유 |
|---|---|---|
| 가 | 가능 | 100은 int 범위 안 |
| 나 | 가능 | 상수 100은 byte 범위 안 |
| 다 | 오류 | 1000은 byte 범위 -128~127 밖 |
| 라 | 가능 | L 접미사로 long 리터럴 명시 |
| 마 | 오류 | 1.0은 double; 1.0f가 필요 |
문제 7. 문자열/문자/숫자 변환¶
| 식 | 결과 | 타입 |
|---|---|---|
① "7".charAt(0) |
'7' |
char |
② '7' - '0' |
7 |
int |
③ Integer.parseInt("7") + 1 |
8 |
int |
문제 8. 직접 코딩¶
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Total: ");
int total = sc.nextInt();
System.out.print("Count: ");
int count = sc.nextInt();
double average = (double) total / count;
System.out.printf("Average: %.2f%n", average);
}
}
(double) total로 형변환하면 count도 double로 자동 형변환되어 실수 나눗셈이 된다. total / count를 먼저 계산한 뒤 double에 저장하면 이미 정수 나눗셈 결과가 되어 소수 부분을 되살릴 수 없다.