Saturday, October 21, 2006
C언어/자바,Java] char를 int로 변환; char to float, long, 자료형 타입 캐스팅
어떤 자료형을 다른 자료형으로 변환하기 위해서는, 캐스트 연산자로 타입 캐스팅을 하면 됩니다.
변환하고 싶은 자료형을 (int) 이렇게 소괄호 속에 기입해서, 변환 대상 앞에 붙이면 됩니다.
C언어는 물론이고, 자바에서도 마찬가지입니다. 다만 자바에는 unsigned 형이 없습니다.
그런데 캐스팅 자체는 쉽지만, 큰 자료형을 작은 자료형으로 변환할 때에는 문제가 있습니다. 예를 들어,
unsigned char 는 최대 255 까지 저장할 수 있기에, 255가 넘는 int / unsigned int / long 등을 캐스팅하여 억지로 대입하면, 값이 리셋되어 0부터 다시 시작하게 되어 버립니다. 즉 캐스팅이 되지 않습니다. 그렇다고 해서 에러가 나는 것도 아니기에 버그의 원인이 될 가능성이 높습니다.
파일명: 0.cpp
각 자료형의 한계값이 여기에 있습니다: ▶▶ [C언어] 정수 실수 종류(데이터형) / 최소값 최대값 - char int float - Data Type Ranges
▶▶ 자바.Java] 정수 실수 종류(데이터형;자료형), 최소값/최대값: int, long, float, double
변환하고 싶은 자료형을 (int) 이렇게 소괄호 속에 기입해서, 변환 대상 앞에 붙이면 됩니다.
C언어는 물론이고, 자바에서도 마찬가지입니다. 다만 자바에는 unsigned 형이 없습니다.
그런데 캐스팅 자체는 쉽지만, 큰 자료형을 작은 자료형으로 변환할 때에는 문제가 있습니다. 예를 들어,
unsigned char 는 최대 255 까지 저장할 수 있기에, 255가 넘는 int / unsigned int / long 등을 캐스팅하여 억지로 대입하면, 값이 리셋되어 0부터 다시 시작하게 되어 버립니다. 즉 캐스팅이 되지 않습니다. 그렇다고 해서 에러가 나는 것도 아니기에 버그의 원인이 될 가능성이 높습니다.
타입 캐스팅 (자료형 변환) 예제 소스
파일명: 0.cpp
#include <stdio.h>
int main(void) {
unsigned char uc = 'A'; // A 의 아스키 코드는 10진수로 65
char c = 'B'; // B 의 아스키 코드는 10진수로 66
printf("%d %d\n", (int) uc, (int) c); // char 를 int 로 변환 출력
// 결과: 65 66
int i = 48152;
unsigned int ui = (unsigned int) i; // int 를 unsigned int 로 변환
printf("%u\n", ui);
// 결과: 48152
char c2 = 'A';
float f = (float) c2; // char 를 float 로 변환
printf("%f\n", f);
// 결과: 65.000000
// 잘못된 결과
unsigned int ix = 256;
unsigned char cx = (unsigned char) ix; // 문제 발생
printf("%d\n", cx);
// 결과: 0
return 0;
}
int main(void) {
unsigned char uc = 'A'; // A 의 아스키 코드는 10진수로 65
char c = 'B'; // B 의 아스키 코드는 10진수로 66
printf("%d %d\n", (int) uc, (int) c); // char 를 int 로 변환 출력
// 결과: 65 66
int i = 48152;
unsigned int ui = (unsigned int) i; // int 를 unsigned int 로 변환
printf("%u\n", ui);
// 결과: 48152
char c2 = 'A';
float f = (float) c2; // char 를 float 로 변환
printf("%f\n", f);
// 결과: 65.000000
// 잘못된 결과
unsigned int ix = 256;
unsigned char cx = (unsigned char) ix; // 문제 발생
printf("%d\n", cx);
// 결과: 0
return 0;
}
각 자료형의 한계값이 여기에 있습니다: ▶▶ [C언어] 정수 실수 종류(데이터형) / 최소값 최대값 - char int float - Data Type Ranges
▶▶ 자바.Java] 정수 실수 종류(데이터형;자료형), 최소값/최대값: int, long, float, double
tag: cpp
C언어 | C/C++ (Visual C++)
tag: java
자바 | Java
<< Home