IT 수업 10주차 (5) 형변환
● (자료) 형변환
연산시 일치하지 않는 자료형을 일치시키는 작업
데이터 손실을 최소화하기 위해서 형변환 함.
- 자동형변환(암시적 형변환) : 컴파일러에 의해 자동 형변환
- 강제형변환(명시적 형변환) : 프로그래머에 의해 강제 형변환
● 자동형변환(=)
- 범위가 넓은 공간에 작은값이 대입되는 경우
- byte > short,char > int > long > float > double
< 실행화면 >
● 강제 형변환
- 좁은범위공간에 큰값을 넣으려고 하는경우
- 기본적으로 불가능하기 때문에 강제로 자료형을 바꾸어 전달한다
- 데이터 손실의 염려가 있다
< 실행화면 >
< 실행화면 >
● 연산식
- 서로 다른 타입의 피연산자가 있을 경우 두 연산자 중 크기가 큰 타입으로 자동변환된 후 연산을 수행한다.
- byte, char, short는 int 타입으로 변환된 후 연사이 수행되며, 연산의 결과도 int 타입이 된다.
- char 타입의 연산 결과는 int 타입으로 산출
- 부호 연산자(+, - )의 산출 타입은 int
- 비트 반전 연산자 산출 타입은 int , 비트 반전 연산자는 정수타입 (byte, short, int, long)의 피연산자에만 사용된다.
- 비트 반전 연산자의 산출값이 1을 더하면 부호가 반대인 정수를 얻을 수 있다.
● 산술연산자 규칙
- 피연산자들이 모두 정수타입이고, int 타입(4byte)보다 크기가 작은 타입일 경우 모두 int 타입으로 변환 후 연산을 수행하며, 산출 타입은 int가 된다.
- 피연산자들이 모두 정수타입이고, long 타입이 있을 경우 모두 long 타입으로 변환 후, 연산을 수행하며, 산출 타입은 long이 된다.
- 피연산자 중 실수타입(float, double)이 있을 경우, 크기가 큰 실수 타입으로 변환 후 연산을 수행하며, 연산의 산출 타입은 실수 타입이 된다.
ex) int + double -> double + double = double
- 즉 연산의 결과를 실수로 얻고 싶다면 피연산자 중 최소한 하나는 실수 타입이어야 한다.
● 정수 연산식(int 보다 작은 변수자료형(short, char , byte))
- int 로 자동 형변환
byte x = 10;
byte y = 20;
byte result1 =(byte)(x + y); : 컴파일 에러 x,y는 각각 int형 자료료 담아서 처리가 되고 왼쪽 byte형으로 저장시 작은공간에 큰자료형타입넣으려는 문제 발생한다.
● 정수 연산식(int 보다 큰 변수자료형(long))
- 큰 타입으로 자동 형 변환
int result =(int)(var1 + var2 + var3); : 오른쪽 변수들은 long 으로 자동형변환 됨 but 왼쪽 공간이 작은공간이기 때문에 컴파일 에러가 난다.
● 실수연산식
- 큰 타입으로 자동 형 변환
int result3 = (int)(intvar + flvar+ dbvar); : intvar , flvar 가 각각 double 형으로 형변환된값이 더해져서 result 3에 저장된다.
● 나눗셈 연산
System.out.println(10/4); 는 '10'때문에 소수점이하가 버려져 데이터 손실이나 '2.5'가 아닌 '2'라는 int형으로 값이 나온다.
그러므로 소숫점 '2.5'가 나오게 하려면 System.out.println(10.0/4); 하면 된다.
< 실행화면 >
● short vs char
- char 와 short는 같은 size(2byte)를 가지나 short는 양,음수를 지원 / char는 양수만 지원한다.
- short, char간의 데이터교환시 동일한 값을 저장하더라도 표현하는 범위가 다르기 때문에 각각 다른값이 나올수도 있다.
< 실행화면 >
● 문자열 + 문자열
- 문자열 + 문자열
- 문자열 + 문자 + 문자열
- 문자열 + 숫자 -> 숫자를 문자열로 해석! 단순연결
< 실행화면 >
','은 숫자로 인식이 가능하므로 System.out.println(','+1+"하이"); 하면 (결과)45하이 로 나온다.
● 문자열 -> 숫자형 변환
- Byte.parseByte()
- Interger.parseInt()
- Float .parseFloat()
- Double.parseDouble()
- 정수
< 실행화면 >
- 실수
< 실행화면 >
● 숫자형 -> 문자형 변환
< 실행화면 >
< 정리 >
< 연습문제 >
< 답 >