콘텐츠로 이동

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.0double; 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로 형변환하면 countdouble로 자동 형변환되어 실수 나눗셈이 된다. total / count를 먼저 계산한 뒤 double에 저장하면 이미 정수 나눗셈 결과가 되어 소수 부분을 되살릴 수 없다.