변수 - 형변환(Type Casting)

변수 - 형변환(Type Casting)

값의 종류 즉, 자료형을 바꾸는 개념

컴퓨터 안에서 값을 처리하는 규칙

1. =(대입연산자)를 기준으로 왼쪽, 오른쪽이 같은 자료형이여야 한다.

같은 자료형에 해당되는 리터럴 값만 대입이 가능하다.

자료형이 다를 경우에는? 값을 바꿔서 대입해야 한다

2. 같은 자료형들끼리만 연산이 가능하다.만들어줘야 한다.

다른 자료형끼리 연산을 하고싶다면 ?

둘 중 하나는 “형변환”을 해서 나머지 하나와 동일하게 만들어줘야 한다.

3. 연산의 결과도 같은 자료형이여야 한다.

ex) 1+1=2(정수), 1.1+1.1=2.2(실수)

[표현법] ( 바꿀 자료형 ) 값

﹂형변환 연산자, cast 연산자

형변환의 종류

-자동 형변환(promotion)

자동으로 형변환이 진행

내가 형변환을 할 필요가 X

작은 크기의 자료형 => 큰 크기의 자료형

1. int (4byte, 정수) -> double(8byte, 실수)

2. int(4byte, 정수) -> long(8byte, 정수)

3. 특이케이스 long(8byte, 정수) -> float(4byte, 실수)

정수가 실수로 담길 때 큰 사이즈의 정수가 작은 사이즈의 실수에 대입이 가능!

왜 ?? 4byte의 float형이 long형보다 담을 수 있는 값의 범위가 더 크기 때문이다.

4. char(2byte) <-> int(byte) : char랑 int는 양방향 형변환이 가능

//둘다 b가 출력된다. (아스키코드표 참조)

번외) (char)2 ≠ '2'

System.out.println('김'); //김 System.out.println((int)'김'); //44608 (아스키코드표) System.out.println('김' + (char)2); //44610 //연산하면 둘다 int형으로 형변환이 일어나서 '김'=44608, (char)2=2 int 2가 char로 형변환 됐지만 연산하기 위하여 다시 int로 형변환됨. 숫자 2의 문자형은 STX(Start of Text) 제어문자로 자바가 표현할 수 없는 문자이다.

System.out.println('김' + '2'); // 44658 // 44608 + 50 = 44608

※그러므로 (char)2 와 '2'는 같지 않다!!!!

5. 특이케이스 byte, short 간의 연산

결과값이 int형 ⇒ CPU가 값을 처리하는 기본크기 int형의 크기(4byte)

//3

byte b3 = 128;// Error, byte의 표현범위가 [-128 ~ 127]이므로 오버플로우다. byte b3 = (byte)128;// OK, (byte)를 붙여서 형변환 하면 가능하지만 소실이 잃어난다.

-강제형변환 (명시적 형변환)

: 큰 바이트 -> 작은 바이트

(바꿀 자료형) 값

1. double(8byte) -> float(4byte)

float f1 = 4.0f; double d2 = 8.0; float f2 = (float)d2;

2. double(8byte) -> int(4byte)

double d3 = 10.89; int i3 = (int)d3; System.out.println(i3);// 0.89 소수점 뒷 부분이 절삭 되었다. => 데이터가 손실 int iNum = 10; double dNum= 8.89; System.out.println(iNum + dNum);//18.89 int가 표현범위가 더 넓은 double형으로 형변환 되어서 10.0 + 8.89 = 18.89

from http://jjorong-e.tistory.com/8 by ccl(A) rewrite - 2021-10-19 23:01:39