본문 바로가기
Backend/Java

char - int 형변환 살펴보기

by 마진 2021. 5. 18.

 이해했다고 생각했지만 코드를 작성하다 Character - Integer 간 형변환 때문에 원하는 결과값이 안나와서

정리하게 되었습니다.

 

본 내용에 들어가기 앞서,

 

 임의의 숫자를 문자열로 입력받고 특정 위치의 숫자를 활용하여 연산하는 코드를 생각해보겠습니다.

첫번째와 세번째 위치의 숫자를 더한다고 가정했을 때, 문자열의 특정 위치에 있는 문자를 반환하는 charAt(int index)메소드를 떠올릴 수 있습니다. 

 

String example = "23456";		//입력받은 숫자열
int num1 = example.charAt(0);		//첫번째 숫자
int num2 = example.charAt(2);		//세번째 숫자

int sum = num1+num2;


/* <참고>
 * charAt(int index) : String의 인스턴스 메소드
 * 	               문자열에서 index번째 문자를 char형으로 반환한다.
 */

 

 

위 처럼 계산했을 때 그 sum에 저장된 값은 얼마일까요?

.

.

.

 답은 102 입니다.

 

그 이유는  char 자료형인 example.charAt(0)과 example.charAt(2)를 모두 int 자료형에 저장했기 때문입니다.

 

 여러분이 아시는 것과 같이 char형 문자들은 각각 대응되는 코드값이 있으며 이 관계는 아스키코드와 유니코드로 정리되어 있습니다. 때문에, char형 문자들을 int형 변수에 대입하면 문자값에 해당하는 10진수 코드번호가 저장되는 것입니다. 

 

ASCII 문자표

ASCII코드에서 문자 A는 십진법 코드로 65입니다.

 

아래처럼 A를 정수로 형변환하여 출력하면 A의 십진법 코드값인 65가 출력됩니다.

 

int num3 = var1 ;			// char형 data를 int형 변수에 저장할 경우 자동형변환 발생
System.out.println(num3);		// 65가 출력됩니다.

 

코드 표에 숫자는 0~9 뿐이며 이는 우리가 인식하는 정수가 아닌 문자입니다.

(10진수로 표기되는 코드값 : 48~57)

 

 

 

어떻게 원하는 정수를 구할 수 있을까요?

 

답은 '0'을 빼는 것입니다.   (문자의 코드값끼리는 연산이 가능합니다.)

 

*주의* : 0을 따옴표로 감싸서 char형으로 표시해야합니다. 

 

String example="234";
		
int num1 = example.charAt(0)-'0';			// 코드값 : 0 (48-48=0)
int num2 = example.charAt(2)-'0';			// 코드값 : 2 (50-48=2)

int sum = num1+num2;

 

이제 위 코드의 변수 sum에는 6이 저장됩니다.

 

 

결론:

 

 char형으로 반환되는 메소드를 통해 0~9 사이의 character를 받은 후 이를 활용하여 연산작업이 필요하다면

 

  '0'(char type)을 빼주어 원하는 정수형태로 바꿔서 사용하자.

 


 

-참고-

* 자동형변환

> 연산시 작은 자료형을 큰 자료형으로 변환

   3 + 1.5 => int + double => double + double  (3.0 + 1.5 = 4.5)

 

> int 보다 작은 자료형끼리 연산하면 자동으로 int로 형변환

   byte su1=10, su2=20;

   int su3 = su1+su2;        

 

 

ASCII - 위키백과, 우리 모두의 백과사전 (wikipedia.org)

 

ASCII - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 1972 프린터 사용 설명서에 개시된 아스키 코드 차트표 미국정보교환표준부호(영어: American Standard Code for Information Interchange), 또는 줄여서 ASCII( , 아스키)는 영문

ko.wikipedia.org