. Java의 정석 예제 풀이

[Java의 정석] Chapter 02 변수 예제 #3

박인영 2021. 9. 1. 02:23

 
Java의 정석 70page

실수형 float, double 정밀도 관련

예제 2-10 FloatEx1

(1) float 타입 변수 f에 9.12345678901234567890f를 초기화/선언

(2) float 타입 변수 f2에 1.2345678901234567890f를 초기화/선언

(3) double 타입 변수 d에 9.12345678901234567890d를 초기화/선언

(4) printf()로 1~3 변수에 저장된 값 콘솔에서 확인

[실행결과]
     123456789012345678901234
f  : 9.123457
f  :   9.12345695495605500000
f2 :   1.23456788063049320000
d  :   9.12345678901234600000

▼ 나의 풀이

public class FloatEx1 {
	public static void main(String[] args) {
		float  f   = 9.12345678901234567890f;
		float  f2  = 1.2345678901234567890f;
		double d   = 9.12345678901234567890d;

		System.out.printf("     123456789012345678901234%n");
		System.out.printf("f  : %f%n", f);
		System.out.printf("f  : %24.20f%n", f);
		System.out.printf("f2 : %24.20f%n", f2);
		System.out.printf("d  : %24.20f%n", d);
	}
}

 
Java의 정석 73page

실수형 float 타입의 저장 관련

예제 2-11 FloatToBinEx

(1) float 타입 변수 f에 9.1234567f를 초기화/선언
(2) int 타입 변수 i에 변수 f의 값을 int타입으로 해석한 값을 초기화/선언

(3) printf()로 f와 i 변수에 저장된 값 콘솔에서 확인

[실행결과]
9.123457
4111f9ae

▼ 나의 풀이

- Float.floatToIntBits() 답안 참조

public class FloatToBinEx {
	public static void main(String args[]) {
		float f = -9.1234567f;
		int i = Float.floatToIntBits(f);
		System.out.printf("%f%n", f);
		System.out.printf("%x%n", i);
	}
}

 
Java의 정석 75page

형변환 관련

예제 2-12 CastingEx1

(1) double 타입 변수 d에 85.4를 초기화/선언
(2) int 타입 변수 score에 변수 d에 저장된 값을 int 타입으로 형변환하여 초기화/선언

(3) println()으로 변수 d와 score에 저장된 값 콘솔에서 확인

[실행결과]
    d = 85.4
score = 85

▼ 나의 풀이

public class CastingEx1 {
	public static void main(String[] args) {
		double d  = 85.4;
		int score = (int)d;
		System.out.println("    d = "+d);
		System.out.println("score = "+score);
	}
}

 
Java의 정석 76page

형변환 관련

예제 2-13 CastingEx2

(1) int 타입 변수 i에 10을 초기화/선언
(2) byte 타입 변수 b에 변수 i에 저장된 값을 byte 타입으로 형변환하여 초기화/선언

(3) printf()로 i와 b 변수에 저장된 값 콘솔에서 확인

(4) 변수 i에 300 할당
(5) 변수 b에 변수 i에 저장된 값을 byte 타입으로 형변환하여 할당

(6) printf()로 i와 b 변수에 저장된 값 콘솔에서 확인

(7) 변수 b에 10 할당
(8) 변수 i에 변수 b에 저장된 값을 int 타입으로 형변환하여 할당

(9) printf()로 i와 b 변수에 저장된 값 콘솔에서 확인

(10) 변수 b에 -2 할당
(11) 변수 i에 변수 b에 저장된 값을 int 타입으로 형변환하여 할당

(12) printf()로 i와 b 변수에 저장된 값 콘솔에서 확인

(13) println()으로 변수 i에 저장된 값을 2진 정수로 변환한 문자열 콘솔에서 확인

[실행결과]
[int -> byte] i=10 -> b=10
[int -> byte] i=300 -> b=44
[byte -> int] b=10 -> i=10
[byte -> int] b=-2 -> i=-2
i=11111111111111111111111111111110

▼ 나의 풀이

- Integer.toBinaryString() 답안 참고

public class CastingEx2 {
	public static void main(String[] args) {
		int  i = 10;
		byte b = (byte)i;
		System.out.printf("[int -> byte] i=%d -> b=%d%n", i, b); 
		
		i = 300;
		b = (byte)i;
		System.out.printf("[int -> byte] i=%d -> b=%d%n", i, b); 

		b = 10;
		i = (int)b;
		System.out.printf("[byte -> int] b=%d -> i=%d%n", b, i); 

		b = -2;
		i = (int)b;
		System.out.printf("[byte -> int] b=%d -> i=%d%n", b, i); 

		System.out.println("i="+Integer.toBinaryString(i));
	}
}

 
Java의 정석 78page

형변환 관련

예제 2-14 CastingEx3

(1) float 타입 변수 f에 9.1234567f를 초기화/선언
(2) double 타입 변수 d에 9.1234567을 초기화/선언
(3) double 타입 변수 d2에  변수 f에 저장된 값을 double 타입으로 형변환하여 초기화/선언

(4) printf()로 1~3 변수에 저장된 값 콘솔에서 확인

[실행결과]
f =9.123456954956055000
d =9.123456700000000000
d2=9.123456954956055000

▼ 나의 풀이

public class CastingEx3 {
	public static void main(String[] args) {
		float f   = 9.1234567f;
		double d  = 9.1234567;
		double d2 = (double)f;

		System.out.printf("f =%20.18f\n", f);
		System.out.printf("d =%20.18f\n", d);
		System.out.printf("d2=%20.18f\n", d2);
	}
}

 

 
Java의 정석 81page

정수형과 실수형 간의 형변환 관련

예제 2-15 CastingEx4

(1) int 타입 변수 i에 91234567을 초기화/선언

(2) float 타입 변수 f에, 변수 i에 저장된 값을 float 타입으로 형변환하여 초기화/선언

(3) int 타입 변수 i2에, 변수 f에 저장된 값을 int 타입으로 형변환하여 초기화/선언

(4) double 타입 변수 d에, 변수 i에 저장된 값을 double 타입으로 형변환하여 초기화/선언
(5) int 타입 변수 i3에, 변수 d에 저장된 값을 int 타입으로 형변환하여 초기화/선언

(6) float 타입 변수 f2에, 1.666f을 초기화/선언
(7) int 타입 변수 i4에, 변수 f2에 저장된 값을 int 타입으로 형변환하여 초기화/선언

(8) printf()로 1~7 변수에 저장된 값 콘솔에서 확인

[실행결과]
i = 91234567
f = 91234568.000000, i2 = 91234568
d = 91234567.000000, i3 = 91234567
(int)1.666000 = 1

▼ 나의 풀이

public class CastingEx4 {
	public static void main(String[] args) {
		int i = 91234567;
		float f = (float)i;
		int i2 = (int)f;

		double d = (double)i;
		int i3 = (int)d;

		float f2 = 1.666f;
		int i4 = (int)f2;

		System.out.printf("i = %d\n", i);
		System.out.printf("f = %f, i2 = %d\n", f, i2);
		System.out.printf("d = %f, i3 = %d\n", d, i3);
		System.out.printf("(int)%f = %d\n", f2, i4);
	}
}

 

 

 

★ 암기 부족한 부분

- printf()의 지시자 %f는 기본적으로 소수점 이하 6자리까지만 출력

- 실수형 float 타입 정밀도 7자리, double 타입 정밀도 15자리

- float → int : Float.floatToIntBits()

- int → binary : Integer.toBinaryString()