2-5장 형 변환


1. 유형 변환(캐스팅)이란 무엇입니까?

변수 또는 상수 유형을 다른 유형으로 변환

2. 유형 변환 방법

(유형) 피연산자

여기서 사용되는 괄호()는 ‘캐스트 연산자‘, ‘캐스트 연산자‘.

double d = 85.4;
int score = (int)d;
-> int score = (int)85.4;
-> int score = 85;

형식 변환 연산자는 피연산자의 값을 읽고 지정된 형식으로 변환한 다음 결과를 반환합니다.

피연산자인 변수 d의 값은 변하지 않는다.

기본 유형에서 boolean 이외의 유형은 서로 변환할 수 있습니다.

기본 및 참조 유형 사이의 유형 변환 불가능한Do. → 7장에서 자세히 논의


실수형 → 정수형유형에서 변환할 때 값은 쉼표 뒤에 있습니다.

버리다.

double d = 3.65;
float f = 3.65f;

System.out.println((int)d);  // 3
System.out.println((int)f);  // 3

3. 정수 타입 간 타입 변환

큰놈 → 작은놈

예) int → 바이트


크기 차이에 따라 잘립니다.

감가 상각일어난다

작은글씨 → 큰글씨

예) 바이트 → 정수

정수: 자유 공간 0~로 채우다


부정적인: 자유 공간 하나~로 채우다


캐스팅 후에도 캐릭터가 보존됨하는 것이다

4. 리얼 타입 간 타입 변환

작은글씨 → 큰글씨

예) 플로트 → 더블

지수(E): float의 밑수 127을 빼고 double의 밑수인 1023을 더합니다.

가수(남): 부동 소수점 가수의 23자리를 채우고 나머지 숫자를 0으로 채웁니다.


큰놈 → 작은놈


ex) 더블 → 플로트

지수(E): double의 밑인 1023을 빼고 float의 밑인 127을 더합니다.

가수(남): Double의 52개 가수 중 23개만 저장되고 나머지는 버려집니다.


* 유형 변환 시 가수의 24번째 자리는 반올림될 수 있습니다.

24번째 자리의 숫자가 1이면 23번째 자리의 값을 반올림하여 1씩 증가시킵니다.


Float의 범위를 벗어난 값으로 캐스팅

double d = 1.0e100;  // float의 최대값보다 큰 값(1.0 * 10^100)
float f = (float)d;  // f는 무한대

double d = 1.0e-50;  // float의 최소값보다 작은 값(1.0 * 10^-50)
float f = (float)d;  // f는 0

자세한 예

float f = 9.1234567f;
double d = 9.1234567;
double d2 = (double)f;

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

1. 수영 선수 f = 9.1234567f;


2. 더블 d = 9.1234567;


3. 더블 d2 = (더블)f;

저장할 때 값이 이미 변경되었기 때문입니다.

유형 변환은 값을 동일하게 만들지 않습니다.

5. 정수형과 실수형의 형변환

정수와 실수 저장 방법 비교


정수형을 실수형으로 변환


정수는 이진수로 변환된 다음 실수가 저장되는 방식으로 정규화되고 저장됩니다.

+) 정확도 오류

정수는 최대 10자리정확도 요구 사항

약 7자리의 정밀도를 제공하는 float에 저장하면 오류가 발생합니다.

전) 91234567플로트 유형으로 캐스팅하는 경우 9123458.0된다

⇒ 십진법 8자리 이상의 값실수형으로 변환할 때 호버링아니다 더블유형으로 변환해야 합니다.

실수를 정수 유형으로 변환

실수의 소수점 값은 내림됩니다.


실수의 소수점은 버리고 나머지 정수는 정수형 메모리 범위를 초과한 경우 과다 세대

6. 자동 유형 변환

자동 유형 변환 규칙

컴파일러 유형 일치 기준

기존 값 최대한 유지가능한 유형으로 자동 유형 변환.


자동으로 입력할 수 있는 길찾기

이 방향으로만 자동 유형 변환 가능

표현의 범위 좁은 타입 → 넓은 타입유형 변환은 값 손실이 없으므로 표현의 폭이 넓어졌다변환된다

여기서 몇 가지 질문이 생깁니다.

호버링‘4바이트’, `8byte`로 데이터 타입의 크기는 크지만 방향은 Long → Float입니다.

무슨 이유로?

보통 데이터형이 클수록 값의 표현범위가 커지는데 실수형은 정수형과 다르기 때문에 이는 실수형이 정수형보다 표현 범위가 훨씬 크기 때문입니다.

오전.

하지만 정수형→실수형정밀도 제한으로 인한 유형 변환 시 오류 가능성존재하는

짧은그리고`2바이트`, 데이터형 크기는 똑같은데 왜 화살표가 없지?

char와 short는 크기가 같고, 범위는 0 ~ 2^16-1(0 ~ 65535)입니다.


짧은범위는 -2^15에서 2^15-1(-32768에서 32767)이므로 범위가 다릅니다.


둘 중 하나로 형변환 감가 상각어떻게 그런 일이 일어날 수 있습니까 자동 유형 변환을 수행할 수 없습니다.


모두.

최종 청소

  1. 부울 이외의 것 7가지 기본형을 함께 입력 가능하다.

  2. 기본 형식과 참조 형식은 서로 캐스팅할 수 없습니다.

  3. 기본적으로 유형이 다른 변수 간의 연산에는 유형 변환이 필요합니다.

    값 범위가 작은 타입 → 큰 타입의 타입변환 생략할수있다.

참조

자바의 고전 – 남궁성