'잡다'에 해당되는 글 1건
- 2008/07/01 까먹고 있었거나 잊어 먹고 있었던 잡다하면서 나름 중요한 C 문법
이것때문에 연산 결과가 자꾸 다르게 나와서 머리를 싸메고 있었던 적도 있었지요 ㅎㅎ
그냥 후기 삼아서 올려봅니다 ㅎㅎ
1. 변수형에 선정에 관하여
int형 연산이 빠른 이유
char c1 = 10, c2 = 20;
char c3 = c1 + c2;
위 과정에서 c1 + c2 연산 수행 시 data의 형 변환이 일어나게 되는데 c1과 c2가 가지고 있는 데이터가 int로 변환된 다음 다시 그 int 데이터가 char 형태의 c3에 대입 된다.
때문에 연산이 필요한 data의 경우에는 int형으로 사용하는 것이 형 변환이 일어나지 않으므로 빠른 연산을 보여 주게 되겠다.
일반적으로 int 형은 연산을 처리하는 processor의 성능에 따라 결정된다고 되어 있다.
(시스템 엔지니어를 위한 c/c++완벽 가이드, 박규환 저, 홍릉과학 출판사) 따라서 32bit의 윈도우 xp 급의 컴퓨터를 사용한다면 연산 하고자 하는 변수는 int로 선언하는 것이 좋을 것 같다.
실수의 경우에는 float는 오차가 너무 크므로 double을 사용하는 것이 좋다.
float a1=0;
double a2 =0;
int b;
for(b=0;b<100<b++)
{
a1 += 0.1;
a2 += 0.1;
}
printf("%f %f ", a1, a2);
위 프로그램과 a1과 a2의 값을 비교하여 보면 된다.
2. double 형 입력
scanf를 통해 입력 받을 때는 %lf를 사용하여야 한다.
printf에서 출력시에 %f를 사용하여도 되므로 까먹고 있었다.
3. 산술 연산 결과의 자료형은 피연산자의 자료형과 일치한다.
int a =1, b= 2;
float c = a/b;
printf("%f ",c);
위 프로그램의 결과는 0.0 이다.
int 형끼리 연산한 결과는 int형이 되기 때문이다.
따라서 이럴 때 는 두 번째 줄에 연산결과를 강제로 형변환한 다음 c에 입력하는 형태로 하여야 한다.
float c = (float)a/b;

Prev
