My footsteps

형변환 본문

예습/이론

형변환

밀김 2022. 12. 30. 21:12
728x90

 

 

 

 

- 형변환 : 변수 또는 상수의 타입을 다른 타입으로 변환하는것

 

- 자동형변환 : 컴파일러가 자동으로 형변환을 해주는것. 주로 작은값을 큰그릇에 넣을때 알아서 형변환이 된다.

 

- 형변환식 쓰는법 : (타입)피연산자

 

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를 수동으로 써서 수동형변환을 해준다

 

 

char는 크기가 다르기 때문에 수동형변환 해줘야함

 

 

 

- 자동 형변환의 예외도 있긴 하다.

 

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로 변환을 하여 계산해야한다.

그래서 유니코드가 존재하는것...(문자를 숫자로 변환하기 위해)

 

 

- 계산식을 쓸때는 오버플로우가 발생하지 않게 해야한다. 오버플로우가 발생한다면 어느 한쪽을 큰그릇의 범위로 형변환을 시켜준뒤 다시 계산식을 써야함

 

 

 

 

 

 

 

 

 

728x90

'예습 > 이론' 카테고리의 다른 글

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