본문 바로가기

C-programing/C언어 기초

[C언어기초] C언어 연산자

C언어 연산자. C언어의 아주 기초적인 내용이다. 기초적이기 때문에 소홀히 하기 쉬운 부분. C언어에서 연산자가 매우 중요한 역할을 하고 있다 할 수 있지만, 주목받지 못하는 이유는 쉽기도 쉽거니와, 소프트웨어 관련 프로그램에서는 문법보다 많은 비중을 차지하지 못하기 때문이다. 알다시피, 복잡한 수식연산이나 공업수학관련 프로그램으로 C언어를 많이 사용하지 않는다. MATLAB이나, mathworks를 많이 사용하기 때문에, C언어에서 공학 수식계산용 프로그램으로는 그다지 많이 활용되고 있지 못하다. 물론, MATLAB과 같은 프로그램은 모두 C언어를 기반으로 하고있지만 말이다. 그럼에도 연산자를 알아야 하는 이유는, 당연히 C언어 코딩 과정이 게임을 만드든, 뭘 하든 연산자와 함수를 통해서 이루어지기 때문이다. 특히, 비트연산자는 하드웨어와 관련된 신호를 처리할 때 도움이 되는 개념으로, 디지털공학과 전자회로 등 과목들을 잘 이해하기 위해 배워두어야 한다.

 

 

>연산자 종류

 

 

 

 

비트 연산자는 다음 포스팅에 따로 다룰 예정입니다. 대입연산자부터 조건 연산자까지 다루겠습니다.

 

1. 대입 연산자는 오른쪽에서 왼쪽으로 이루어진다. 관계연산 ==과 대입 연산 = 헷갈릴 수 있다.

2. 복합 대입 연산자는 선 산술 후 대입이다. a+=1; 은, a에 1을 먼저 더하고(산술) 후에 값을 다시 a에 대입한다.

3. 증감 연산자에 선 연산 후 증감, 선 증감 후 연산으로 나뉜다.

4. 관계 연산자 결과는 참(1)과 거짓(0) 뿐이다.

5. 논리 연산자는 참과 거짓을 연산하여 결과로 참(1) 과 거짓(0)을 낳는다.

6. 조건 연산자.

 

 

 

1. 대입 연산자

 

 

 

 

a=1;

○ 대입연산자.

오른쪽에서 왼쪽으로, 자료형에서 자동형변환이 일어날 때도 오른쪽에서 왼쪽순이었다.

 

scanf("%d", &b);

○ '%d 정수형 ~값을 b의 변수 주소 &b위치에 저장하겠다.'

 

(a==b)? printf("a=b=1") : printf("%d(a) =! %d",a,b);

○ '관계연산자와 조건연산자. a와 b의 값이 같은가? 같으면(참) printf("a=b=1") 실행하라, 다르면(거짓) printf("%d(a) =! %d",a,b)를 실행해라.'

a와 b의 값이 참이면 (관계연산자) ' : '를 기준으로 왼쪽을 실행하고 거짓이면 오른쪽을 실행해라. (조건 연산자)

 

 

 

 

3. 증감 연산자

 

 

 

 

a1 = ++a;

○  'a 값을 먼저 증가시키고 그 값을 a1에 대입연산하라' 선 증감 후 연산

 

b1 = b++;

○  'b 값을 먼저 b1에 대입시키고 b의 값을 증가시켜라' 선 연산 후 증감

 

 

 

 

 

printf("%d", ++a);

○  'a 값을 먼저 증가시키고 a값을 출력해라', 선 증감

 

printf("%d", a++);

○  'a 값을 먼저 출력하고, a 값을 증가시켜라', 후 증감

 

printf("%d", a);

○  a값은 전에 전에 후 증감시켰으므로, 6이 출력된다.

 

 

 

 

4 ,5 관계연산자와 논리 연산자

 

 

 

 

result=(a<b);

○  'a<b 관계연산을 하여, 참이면(a<b) 1을 변수 result에 저장하라, 거짓이면(a>=b) 0을 변수 result에 저장하라', 관계연산자.

 

result=(b>0) && (a<2);

○  'b>0, a<2 관계연산을 하여, 둘다 참(b>0, a<2)이면 result에 1을 저장, 둘 중 하나가 참이거나 둘다 거짓이면 0을 저장하라'

 

 

result =! a;

○  'a=2이므로 참(0이외의 수는 모두 참)이므로 부정하여 거짓(0)을 result 에 저장하라'

 

 

 

 

6. 조건 연산자

 

 

 

 

○ 세 개의 수를 입력하여, 세 수 중에 가장 큰 수를 출력하라.

 

scanf("%d %d %d", &a, &b, &c);

○  '변수 a, b, c 값을 입력받아 각 위치에 저장하라'

 

result= (a<b)? b:a;

○  'a<b 관계연산을 하여, 참(a<b)이면 변수 result에 b(큰수)를 저장하라, 거짓(a>=b)이면 변수 result에 a(큰수, 같은수)를 저장하라', 조건연산자. 조건연산자를 통해 큰수를 걸러내 변수에 저장한다.

 

result= (result<c)? c: result;

○ 'result<c를 관계연산을 하여, 참(result<c)이면 변수 result에 c(큰수)를 저장하라, 거짓(result>=c)이면 result에 result(a, b중에 큰수)를 저장하라' 

 

○  result에 셋 중에 가장 큰 수가 저장되어 있다.

 

 

 

조건연산자 두가지 유형

1. (조건식)? printf() : printf();

-> 조건식이 참이면 왼쪽 (:를 기준으로)을 실행한다. 거짓이면 오른쪽을 실행한다.

-> 조건식을 판별하고 바로 출력

2. 변수 = (조건식)? 데이터 : 데이터;

-> 조건식이 참이면 왼쪽 데이터를 변수에 저장한다. 거짓이면 오른쪽 데이터를 변수에 저장한다.

-> 원하는 데이터를 변수에 저장가능하다. 예를들어 반 30명 정원 중 가장 키큰 사람을 구하려고 할 때, 조건연산자와 반복문을 적용하면 쉽게 구할 수 있다.

 

 

나중에, 정의되어 있는 함수 중 조건문, 반복문을 배우게 될 것이다. 특히 조건문은 쉽기 때문에 조건 연산자를 잘 쓰지 않게된다. 하지만, 조건 연산자가 이용하기 더 편할 때가 있기 때문에 잘 알아두어야 한다. 이후 포스팅은 비트 연산자에 대해 얘기하려고 한다.