공부하자/C언어

C언어 문법 공부 5장 [연산자]

YoBot 2016. 11. 19. 17:04

3. 연산자


이제부터는 좀 쉬운 것들을 배우도록 하죠

어렵지는 않지만 매우 중요한 것이니 잘 들으시길 바랍니다.

이제부터 배울껀 연산자 입니다.


C언어는 키워드는 적어도 연산자 만큼은 그 그 어떤 언어보다도 많습니다.

그것이 C언어가 강력한 이유중 하나이죠.

C에서 연산자는 매우 중요하므로 잘 들으셔야 할 부분입니다. 


(1) 기본 수학 연산자

우선 간단히 기본 수학 연산자를 하겠습니다.

C를 모르는 그 어떤 사람이라도 다 아는 것이니 머리 식힐겸 잘 읽어보세요.

기본 수학 연산에는 덧셈, 뺄셈, 곱셈, 나눗셈이 있습니다.

이에 따른 연산자는 다음과 같습니다. 


-------------


+ 덧셈


- 뺄셈


* 곱셈


/ 나눗셈


% 나머지


------------- 

나머지 구하는 연산자 빼면 누구나 다 아는 것이죠?

특별히 설명할것두 없겠네요.


c=a+b; 

이렇게 하면 c에 a와 b를 더해 넣는 것이고 

c=a-b; 

이렇게 하면 c에 a에서 b를 빼 넣는 것이고 더 이상의 설명은 필요 없겠죠?

%는 사용법은 똑같으나 단지 나머지를 구하는 것 입니다. 


(2) 단한 연산자

다음에는 단항 연산자를 알아보죠.

단항 연산자에는 +와 -가 있습니다.

단항 연산자는 변수나 상수앞에 붙여서 부호 표시를 하거나

부호를 바꿀때 쓰입니다.


예를 들어 

a=-b; 

이렇게 하면


a에는 b의 부호를 바꾼 값이 들어가겠죠?

만약 b가 -10이라면 a에는 10이 b가 10이라면 a에는 -10이 들어갑니다.

단항연산자중 +는 생략하면 기본으로 지정되므로 거의 쓰이지는 않습니다.


(3) 우선 순위

다음으로 연산자 우선순위를에 대해 알아보죠.

모든 연산자가 우선순위가 있다는 것은 알고 계시겠죠?

수학에서도 곱셈을 덧셈보다 먼저 하자나요.

그것은 곱셈의 우선순의가 높기 때문이죠.


아직 연산자를 많이 배우지는 않았지만 기본 수학 연산자의 우선순위를 알아보죠.

우선순위는 *, /, % 이 가장 높고 그 다음이 +, -입니다.

그리고 같은 순위에서는 왼쪽부터 계산이 됩니다.

또한 수식에 괄호가 있다면 괄호 안에 식을 먼져 계산하게 됩니다. 


(4) 치환 연산자

우선 치환 연산자 입니다.

치환 연산자는 지금까지 계속 써 왔던 것 입니다.

치환 연산자는 바로 = 입니다. 이 연산자의 쓰임세는 아주 간단하죠?

모두들 알고계실 겁니다.


예를 들어 

a=b;


이런 문장이 있다면 a에 b의 값을 넣으라는 것이 되겠죠?

이렇게 아주 간단합니다.


이렇게 지금까지 쓰던 문장을 단일 치환문 이라고 합니다.

그런데 C에서는 이런 단일 치환문 외에도 다중 치환문이 있습니다. 이것에 대해서도 자세히 알아보죠.

다중 치환문도 그리 어렵지 않은 것 입니다.


이 문장을 보세요. 

a=b=c=d=e=f=1; 

이렇게 한 문자에 치환 연산자가 2개 이상 쓰인 것을 다중 치환문 이라고 합니다.


이 문장의 결과는 어떻게 될까요? a,b,c,d,e,f모두에 1이 들어가겠죠?


치환 연산자는 +,-,*,/등의 연산자와는 다르게 오른쪽에서 왼쪽으로 연산을 수행합니다.


예를 들어.. 

e=a+b+c+d; 

이건 a와 b를 더하고 그 값에 c를 더하는 식으로 왼쪽에서 오른쪽으로 연산을 수행하지만 

a=b=c=d=e=f=1; 

이건 f에 1을 넣고 e에 f의 값 즉 1을 넣고 하는 식으로 오른쪽에서 왼쪽으로 연산을 수행합니다.


위에 있는 다중 치한문 까지는 쉽게 이해가 되셨을 겁니다. 그럼 다음을 보세요. 

a=10+(c=12-2); 

이해가 빨리 되시나요?


어떻게 보면 잘못된 문장 같기도 하지만 이건 에러 없는 정확한 수식 입니다.


그럼 그 문장을 조금 바꿔 두 문장으로 해 보죠. 

c=12-1;


a=10+c; 

이제 이해가 되시나요???


위의 수식을 줄여 쓴 것이 

a=10+(c=12-2); 

이거 입니다..


C에서는 이렇게 희귀한 수식도 인정합니다.


이제 예제 하나 볼까요?? 

/* 파일 이름 : C5-2.C프로그램 내용 : 다중 치환문 예제 */


#include <stdio.h>

void main(){


int a,b,c,d,e,f;


a=b=c=d=e=f=0;

b=10;

c=20;

a=b+(d=c);


printf("%d %d %d %d %d %d\n",a,b,c,d,e,f);



정말 간단한 소스죠. 조금 햇갈리실 것 이지만 잘 분석하면 결과는..


C:\>C5-2.EXE


30 10 20 20 0 0 

C:\> 

이렇게 나옴니다.

 

(5) 타입 캐스팅

이제 치환 연산자도 다 끝났습니다.

그런데 배울것이 하나 더 있는데 그걸 배우기 전에 다음과 같은 경우를 생각해 봅시다.

만약 int형과 unsigned long형태를 같이 계산하면 어떻게 될까요?


자료형의 형태가 다르니 잘못하면 잘못된 결과가 나올수도 있습니다.

이럴때는 데이터 형태을 일시적으로 변경시켜 주면 되는데 이렇게 일시적으로 데이터 형태를 바꿔주는 것을 타입캐스팅(Typecasting) 이라고 합니다.

C에서 타입캐스팅을 하려면 타입캐스팅 연산자를 사용해야 합니다.


그런데 타입캐스팅 연산자는 아주 간단합니다.

타입 형태 키워드들 즉 int, char, float등등이 타입캐스팅 연산자 기능까지 해 주기 때문이죠.


타입캐스팅 방법은

(타입)데이터

이렇게 하면 타입캐스팅이 됩니다.

여기서 타입은 바꿀 형태의 타입캐스팅 연산자 이고 데이터는 형태를 바꿀 데이터 인데 변수나 상수가 올수 있습니다.

또한 수식이 와도 상관 없습니다.


예를 들어보죠 


int a=10;


unsigned long=b,c;


c=(unsigned long)a+b; 

이 소스는 int형인 a를 unsigned long로 타입캐스팅 해서 unsigned long형태인 b와 더해 c에 넣는 것 입니다.

이제 이해가 되셨겠죠?? 


(6) 접미사

한가지 여기서 알고 넘어갈 것이 있는데 (사실 지금 설명할건 연산자와는 상관 없는 거지만....)

상수중 실재값은 정수의 경우 무조건 signed형태로 인식하고 int형태 범위 내에 값이면 int형으로 인식하며 그것을 벗어나면 long형으로 인식하게 됩니다.

그리고 소수의 경우는 무조건 double로 인식하죠

그러므로 상수는 타입 캐스팅이 많이 필요합니다.

만약 123이란 상수가 있다고 합시다.

이건 int형태 범위 내에 있으므로 signed int로 인식됩니다.


그런데 이걸 unsigned long로 타입캐스팅 하려면 

(unsigned long)123 

이렇게 하면 됩니다


하지만 이 방법보다 편한 방법이 있는데 123을 그냥 unsigned long형태로 인식시키는 것이죠.

그렇게 하기 위해선 접미사를 쓰면 됩니다.

접미사에는 L,F,U의 3가지가 있습니다. 그리고 대소문자 구별은 없습니다.


L은 long를, F는 float를, U는 unsigned를 의미 합니다.


그러므로 위에 것을


123UL 

이렇게 서 주면 이 123은 unsigned long로 인식되어 타입 캐스팅이 필요가 없어 집니다.


이것으로 이번 강좌를 마치도록 하겠습니다.


다음 강좌에서는 남은 연산자들을 모두 배워보도록 하죠.