본문 바로가기
프로그래밍 언어/자바

데이터 타입의 사용 #3

by 블루데이제이 2019. 2. 21.
728x90
반응형

3. 숫자형 변환

자바에서는 데이터 타입이 다른 숫자형 사이의 연산에 문제가 발생하지 않는다. 다만 연산의 결과는 두 연산자 중 범위가 넓은 쪽의 데이터 타입을 따른다.


▶ 데이터 타입에 따른 범위

byte < short < int < long < float < double

[표1]


int val1 = 1;

long val2 = 2;

int result = val1 * val2; //에러 연산의 결과는 long형이다.

[표2]


[표2]의 세 번째 문장은 연산을 수행할 수 없다. val1 * val2 연산 결과는 long형이다. 그러므로 int형의 변수 result에 담을 수 없다. [표3]과 같이 result를 long형으로 사용해야 한다.

long result = val1 * val2;

[표3]


▶ 타입간 연산 규칙

int * long = long

int * float = float

short * int = int

long * float = float

double * float = double

[표4]


자바에서는 데이터 타입간 형 변환도 자유롭다. 작은 범위의 데이터 타입은 자기보다 큰 데이터 타입으로 변환이 가능하다.

int val1 = 100;

long val2 = val1; //int형을 long형에 대입


float val3 = 54.32F;

double val4 = val3; //float형을 double형에 대입

[표5]


그러나 큰 범위의 데이터 타입은 자기보다 작은 데이터 타입으로 불가능하다.

long val1 = 2000;

int val2 = val1; //에러 - long형을 int형에 대입 불가

[표6]



단, 명시적인 형 변환을 사용하면 이런 반대되는 작업을 수행할 수 있다.

자신의 데이터 타입을 다른 종류의 데이터 타입으로 변환하는 것을 형 변환 또는 캐스팅(Casting)이라고 한다.


■ 이클립스에 Casting.java파일을 생성한다.

[그림1]


■ [표2]와 같이 입력한 후 Casting.java를 실행한다.

int val1 = 2019;

long val2 = val1;

int val3 = (int)val2;

System.out.println("최초값: " + val1 + " 변환 후: " + val3);

[표2]


[그림2]


[그림2]와 같이 최초값과 변환 후 값이 동일하다.


■ [표3]과 같이 입력한 후 Casting.java를 실행한다.

long val4 = 99999999999L;

int val5 = (int)val4;

System.out.println("최초값: " + val4 + " 변환 후: " + val5);

[표3]


[그림3]


[그림3]의 콘솔창의 두 번째 줄 변환 후 값을 보자. 형 변환하는 데이터 타입의 범위를 초과하였을 경우에는 결과를 예측할 수 없다.


■ [표4]와 같이 입력한 후 Casting.java를 실행한다.

double val6 = 12.34;

int val7 = (int)val6;

System.out.println("최초값: " + val6 + " 변환 후: " + val7);

[표4]


[그림4]


[그림4]의 콘솔창의 세 번째 줄 변환 후 값을 보면 부동 소수점형을 정수형으로 변환하면 소수점 이하의 숫자는 무시된다.

728x90
반응형

'프로그래밍 언어 > 자바' 카테고리의 다른 글

자바연산 #2(대입 연산, 증가와 감소 연산)  (0) 2019.03.18
자바연산 #1(산술연산)  (0) 2019.03.17
데이터 타입의 사용 #2  (0) 2019.02.20
데이터 타입의 사용 #1  (0) 2019.02.17
데이터 타입  (0) 2019.02.16