My footsteps
형변환 본문
- 형변환 : 변수 또는 상수의 타입을 다른 타입으로 변환하는것
- 자동형변환 : 컴파일러가 자동으로 형변환을 해주는것. 주로 작은값을 큰그릇에 넣을때 알아서 형변환이 된다.
- 형변환식 쓰는법 : (타입)피연산자
ex)
double d = 85.4; // 더블 변수 d에 85.4를 대입
int score = (int)d; // 더블이 int보다 범위가 크니까 int에 안담김. 그래서 int로 형변환을함
int score = (int)85.4; // int는 정수임. 그래서 뒤에 소수점은 탈락하게됨. 반올림같은거 없음!!
int score = 85; // 따라서 결과값은 85
- 큰범위를 작은범위에 넣을순 없다. 값손실이 나기 때문에 에러가 발생한다. 그럴때는 수동형변환(괄호에 직접 써주는것)을 해줘야한다
ex)
int i = 3.14f; // float타입이 int보다 커서 다 못들어가기 때문에 값손실로 에러가 난다
int i = (int)3.14f; // 그럴땐 이렇게 앞에 int를 수동으로 써서 수동형변환을 해준다
- 자동 형변환의 예외도 있긴 하다.
ex)
byte b = 100; // 100은 정수int다. int는 byte보다 훨씬 큰데도 에러가 안난다. 그 이유는, byte 타입의 범위는 -128~127인데 변수 b의값은 100이다. 그러므로 byte타입 값의 범위 안에 들어왔기 때문에 큰그릇이여도 작은타입에 넣을수 있는것.
byte b = (byte)100; // 이런 경우에도 컴파일러가 자동 형변환을 해준다
ex)
int i =100;
byte b = i; // 하지만 이 경우에는 에러가 발생한다. 이유는 변수b에 100을 대입한것이 아닌 변수i를 대입했기 때문이다.
위의 경우에는 100이라는 리터럴값이 있었는데 변수를 대입해버리면 그 안에 어떤값이 있을지 모르기 때문에 에러가 난다
byte b = (byte)i; // 그래서 수동형변환을 해줘야한다
- 컴퓨터는 같은 타입끼리만 계산할수 있다. int는 int끼리..float는 float끼리..만약 int 끼리 계산했는데 나눗셈이여서 소수점이 나온다면 소수점 이하는 버려짐 실수가 아니라 정수이니까
- 만약 값이 서로 다를때는 하나의 타입으로 맞춰야할땐 그릇이 큰, 즉 범위가 큰 타입쪽으로 맞춰진다. 값손실 없게 하려고
- 피연산자들의 타입이 int보다 작으면 (byte,short,char) int로 모두 변환되고 결과값 또한 int로 나온다
ex)
'2' - '0' // 문자열 2와 0을 뺀다. 유니코드로 변환하면 2는 50이고 0은 48이다. 따라서 50-48이여서 결과값은 2이다.
이걸 다르게도 해석하면 문자열은 char라서 서로 빼고 뭐고 할수가 없다. 그래서 정수 int로 변환을 하여 계산해야한다.
그래서 유니코드가 존재하는것...(문자를 숫자로 변환하기 위해)
- 계산식을 쓸때는 오버플로우가 발생하지 않게 해야한다. 오버플로우가 발생한다면 어느 한쪽을 큰그릇의 범위로 형변환을 시켜준뒤 다시 계산식을 써야함
'예습 > 이론' 카테고리의 다른 글
for문,while문,break문,배열 (0) | 2023.01.01 |
---|---|
반올림,비교연산자,논리연산자,조건과 대입연산자,조건문과 반복문,if,switch (0) | 2022.12.31 |
단항,이항 연산자 (0) | 2022.12.29 |
연산자 (0) | 2022.12.29 |
Scanner (0) | 2022.12.29 |