본문 바로가기
C언어

야메 C언어 강좌: 4-2. 계산을 해보자(2)

by 케찹이 2020. 4. 23.

 

자 여러분께서 저번 강좌를 보고 이것저것을 따라해보셨다면 많은 곤란함을 아마 직면했을 거라고 생각합니다. 그럼 그 란함들을 해결하기 위해서 추가적인 강의를 진행해보도록 하겠습니다. 

 

처음으로 살펴볼것은 자동 형변환이라는 것입니다. 전 강좌에서 다양한 예시 코드들을 써놓았는데 호기심이 많은 사람들이라면 정수형과 실수형을 동시에 사용해 보았을 겁니다. 한번 살펴보죠.

#include<stdio.h>

int main(){
	int a = 10;
	float b = 3.0;
	
	printf("a / b = %f\n",a/b);
	return 0;
}

 

결과는 3.333333으로 실수 값이 출력되었습니다. 정수(int)와 실수(float)가 계산을 했는데 실수값이 나왔네요. 이러한 규칙을 자동 형변환이라고 합니다. 두개의 다른 종류의 변수가 서로 계산할 때 결과 값은 항상 더 큰 변수로 나오게 됩니다. 즉 char변수와 int 변수가 계산을 하게 되면 int가 결과값의 변수타입이 되겠죠. 

방금 자동 형변환에 대해서 얘기했는데 그럼 강제 형변환 이야기도 해보겠습니다. 강제 형변환과 자동형변환의 기능은 같습니다. 다만 앞으로 우리가 배우면서 더 많은 변수타입들을 만나게 되는데 그때에는 자동형변환이 가능하지 않을때가 있습니다. 그때에는 바로 강제형변환을 사용해줘야겠죠. 사용법은 해당 변수 앞에 괄호를 치고 괄호안에 형변환할 변수타입을 적으면 되겠습니다. 아래의 예처럼 말이죠.

#include<stdio.h>

int main(){
	int a = 10;
	float b = 3.0;
	
	printf("a / b = %f\n",(float)a/b);   //강제 형변환
	return 0;
}

 

 

그 다음으로는 대입연산자에 대하여 이야기 해보도록 하겠습니다. 대입연산자는 처음으로 프로그래밍을 접하는 사람들이 많이 헷갈리고 착각할 수도 있는 개념인데요, 바로 이 '='에 대한 이야기입니다. 우리가 이 등호를 수학에선 등호 왼쪽식과 오른쪽식이 같다라고 사용하지만 컴퓨터에선 그렇게 인식을 하면 안됩니다. 저도 처음에 이것 때문에 조금 헷갈려했던 기억이 있네요. 

컴퓨터에서 '='의 의미는 오른쪽식을 왼쪽식에다 대입한다라는 의미를 갖고 있습니다. 대입입니다! 대입! 다시 말해 우리가 지금까지 사용했던 코드들을 다시 살펴보면 조금 새롭게 이해를 할 수 있겠죠.

int a = 10;

그럼 이 코드는 10이란 상수를 정수형 a라는 변수에 저장한다라는 의미를 갖게 되겠군요. 

대입연산자가 이러한 의미를 갖고 있으므로 어쩌면 많은 여러분들이 시도해봤을 

10 = int a;

라는 코드는 말이 안되는 코드인것을 알수 있겠죠. 이 코드는 정수형 변수 a를 상수 10에다가 저장한다라는 명령입니다. 이는 아예 논리적으로 성립이 안되는 명령이죠. 그럼 "같다" 라는 것을 표현하는 연산자는 무엇일까요? 바로 '==' 등호를 두개 연속으로 사용한 표현이 "같다"를 의미합니다. 이것에 대한 연산자는 아마 다음 강의에서 더 많이 살펴보도록 하겠습니다. 

 

 

#include<stdio.h>

int main(){
    int a = 10, b = 10, c = 10, d = 10;
    
    a = a + 1;
    b += 1;
    ++c;
    d++;
    
    printf("a = %d, b = %d, c = %d, d = %d\n",a,b,c,d);
    return 0;
}    

위의 코드엔 네가지 산술형식이 있습니다. 이 다양한 형식들을 하나씩 살펴보도록 하겠습니다. 

첫번째 식은 방금 막 우리가 배운 개념이 들어가 있는 식이네요. a 에다가 a + 1이란 값을 대입한것입니다. 처음엔 어떻게 a 란 식에 a+1를 넣을 수 있지란 생각이 들수 있지만 말그대로 a+1값을 대입시켜주는 것입니다. 만약에 

b = a + 1;

이라고 하면 a+1값을 b에다가 저장시키는 것처럼말이죠. 그럼 a = a + 1은 a = 10 + 1이 되어 a는 11을 저장하겠네요.

 

두번째 식부터는 처음보는 식들입니다. 하지만 두번째 식은 어렵지않습니다. 그냥 b = b + 1을 쓰기 귀찮아서 b += 1라고 썼다고 이해하시면 되겠네요. 이건 다른 산술 연산자에게도 동일하게 적용됩니다. 밑처럼 말이죠.

a += 1	// a = a + 1
a -= 1  // a = a - 1
a *= 1  // a = a * 1
a /= 1  // a = a / 1

 

세번째 네번째 식은 한번에 설명하도록 하겠습니다. ++를 하게되면 1를 더하라는 식입니다. 그러므로 위 코드에선 c와 d값이 1씩 더하게 되죠. 하지만 두 식에 ++의 위치가 다르죠. 이는 c처럼 ++를 변수 앞에다 적으면 postfix(전위형), d처럼 ++를 변수 뒤에다 적으면 infix(후위형)라고 불립니다. 

 

#include<stdio.h>

int main(){
	int a = 10;
	
	printf("%d\n",++a);
	
	a = 10;
	
	printf("%d\n",a++);
	printf("%d\n",a);
	return 0;
}

위 코드에서 보이듯이 ++a를 하게 되면 10에서 1이 추가된 11이 출력되죠. 하지만 두번째 printf함수의 a++은 10의 값이 출려되고 그 다음엔 다시 11이 출력됩니다. 

처음 출력함수 ++a에선 a에다가 먼저 1을 더하고 식을 1이 더해진 a의 값을 가지고 식이 실행되지만 

두번째 출력함수 a++에선 a에다 1을 더하긴 하지만 식을 실행시키고 마지막에 1을 더하게 됩니다.

그래서 세번째 출력함수에서 a의 값이 11이 출력되게 됩니다. 

 

아직도 계산식에 대해서 부족한 개념이 굉장히 많은 것같지만 빠진 내용들은 앞으로 강의를 진행하면서 보충해보도록 하겠습니다. 오늘도 배운 개념들을 통해 자신의 코드를 반드시 짜보도록 시도해보세요. 

댓글