검색결과 리스트
글
1. 자동 형변환
컴파일러가 자동으로 해주는 자료형의 변환이다.
다른 자료형 간 산술 연산을 하는 경우 자동 형변환이 발생한다.
예를 들어 정수+실수와 같이 자료형이 다르면 컴파일러가 자동 형변환의 우선순위에 자동형변환을 해준다.
우선순위는 char → int → long → float → double → long double순이다.
<실습>
#include <stdio.h>
int main()
{
int a = 100; // 정수
double b = 1.2; // 실수
printf("%lf \n", a+b); // 정수 + 실수->자동으로 자료형변환이 발생.
return 0;
}
-결과-
이것을 풀이하면 변수 a에 저장되어 있는 값 100을 a+b를 연산하기 전에 double형으로 변환시켜
double+double형으로 한다.
double형으로 형 변환된 이유는? 위에 우선순위는 int 보다 double형의 우선순위가 더 높기 때문이다.
어떻게 보면 당연한건데... 쉽게 생각하자.
더 큰 놈?은 더 작은놈한테 들어가는게 말이안된다. double형같이 큰놈이 int형 같이 작은놈으로 어떻게 표현이 된단 말인가?!ㅎㅎ...
대입 연산을 하는 경우에는 대입 연산자를 기준으로 오른쪽에서 왼쪽으로 자동 형변환이 발생한다.
<실습>
#include <stdio.h>
int main()
{
char a = 129; // char형의 범위는 -128~+127까지다. 이런 범위에 129라는 값을 넣게되면 이상한 값이 들어간다. 어떻게? char형으로 자동형변환이 되어 저장된다. 오버플로우가 발생하여 -127이 출력된다.
int b = 1.23 // 1.23의 실수형자료형이 int형으로 형변환되어 b에는 1이 저장된다.
double c = 10; // 정수형 자료형 10이 double형으로 형변환된다. 출력하면? 당연히 10.00000 이런식으로!
printf("%d %d %lf \n", a, b, c);
return 0;
}
-결과-
2. 강제 형변환
프로그래머가 강제로 자료형의 형변환을 시켜준다.
<실습>
#include <stdio.h>
int main()
{
int a = 10;
int b = 3;
double result;
result = a/b; // 정수형/정수형의 결과 3인데 result는 double형이기 때문에 대입 연산자의 자동형변환 우선순위에 따라3.000000이 저장됨.
printf("%lf \n", result);
result = (double)a/b; // double로 강제 형변환 후, 실수형/정수형
printf("%lf \n", result);
result = a/(double)b; // 정수형/실수형
printf("%lf \n", result);
result = (double)a/(double)b; // 실수형/실수형
printf("%lf \n", result);
return 0;
}
-결과-
'Programming > C' 카테고리의 다른 글
C언어 – for문 (0) | 2016.02.04 |
---|---|
C언어 – while문 (0) | 2016.02.04 |
C언어 - 자료형, sizeof()함수 (0) | 2016.02.03 |
C언어 - 연산자(대입, 산술, 복합 대입, 증감, 관계, 논리, 조건, 비트 연산자) (0) | 2016.02.02 |
C언어 - 상수(리터럴 상수, 심볼릭 상수) (0) | 2016.02.01 |
RECENT COMMENT