본문 바로가기

programming language/C 언어

c언어의 연산자

문제를 푸는 데에 있어서 연산자 사용에 관해 부족함이 있어 개념을 정리해보았다.

 

두 개의 피연산자를 요구하는 연산자를 가리켜 '이항 연산자'라고 한다.

대입 연산자와 산술 연사자는 모두 이항 연산자이다.

 

ex)

num = 11;         연산자 = 오른쪽에 있는 값을 연산자 왼쪽에 있는 변수에 대입.

num = 11 + 3;    두 피연산자의 값을 더한다.

-    *     /(왼쪽의 피연산자 값을 오른쪽 피연산자 값으로 나눈다.)    %(나머지를 반환)

 

복합 대입 연산자

+=       a = a +b와 a  +=  b는 같다.

-=        a = a - b   와 a  -=   b는 같다

*=        a = a * b   와  a  *=  b는 같다

/=        a = a / b   와 a   /=  b는 같다.

%=       a = a % b와 a  %= b는 같다

 

그리고 <<=, >>==, ^=, |= 의 복합 대입 연산자가 있다.   

 

부호 연산의 의미를 갖는 +와 - 연산자

+ 연산자와 -연산자는 이항 연산자로서 덧셈과 뺄셈을 의미하지만,

   피연산자가 하나인 단항 연산자로서 부호를 뜻하기도 한다. ex) +5 , -9

 

부호 연산자가 삽입된 문장과 복합 대입 연산자가 삽입된 문장의 혼동

 

*num=-num1;  //부호 연산자의 사용

 num-=num1; //복합 대입 연산자의 사용

위와 같이 연산자와 피연산자 사이에 공백 삽입하지 않는 경우 더욱 혼동이 쉽다.

 

*num = -num1;  //부호 연산자의 사용

 num -= num1;  //복합 대입 연산자의 사용

즉 이와 같이 연산자와 피연산자 사이에 공백을 두는 것이 바람직하다.

 

증가, 감소 연산자

 

++num :  값을 1 증가 후, 속한 문장의 나머지를 진행. (선 증가 , 후 연산)

num++ :  속한 문장을 먼저 진행한 후, 값을 1 증가(선연산 , 후 증가) 

--num (선 감소 , 후 연산)

num-- (선 연산 ,  후 감소)

 

5행에서 변수 num1에 대한 선연산 후감소를 진행.

c언어에서 (소괄호)도 연산자이다. 수학과 같이 먼저 연산하라는 뜻이다.

그럼 5행에서 소괄호 까지 해줬으니까 num1값이 먼저 감소한 상태에서

덧셈 연산을 진행해야 한다고 생각할 수 있지만! 오답이다. 위 출력 결과를 참고하면 된다.

 

즉 후위 증가나 후위 감소 연산 시에는 소괄호의 영향을 받지 않고,

다음 문장으로 넘어가야만 비로소 값의 증가 및 감소가 이뤄진다.

 

관계 연산자(비교 연산자)

관계 연산자는 대소와 동등의 관계를 따지는 연산자이다.

 

n1 <n2  ,  n1> n2 

n1 == n2 :  n1과 n2가 같은가?

n1!= n2:  n1과 n2가 다른가?

n1 <= n2: n1이 n2보다 같거나 작은가? 

n1 >= n2: n1 이 n2 보다 같거나 큰가?

 

위의 관계 연산자들은 조건을 만족하면  을, 만족하지 않으면 거짓을 반환한다.

 

관계 연산의 과정

 

result1 = (num1==num2); 

1.num1과 num2가 같다면 true(1)를 반환.

2. 반환된 결과 변수 result1에 대입.

 

논리 연산자

 

논리 연산자란 AND(논리곱) , OR(논리합),  NOT(논리 부정)을 표현하는 연산자이다.

&& : A&&B: A와 B 모두 참이면 연산 결과로 참을 반환.

|| : A|| B: A와 B 둘 중 하나라도 참이면 연산 결과로 참을 반환

! :! A 참이면 거짓 거짓이면 참을 반환.

 

result1 = ((num1 == 10) && (num2 == 12));로 문장을 입력하였는데,  result1 = (num1 == 10 && num2 == 12); 로 조금 더 간단하게 입력될 수 있다.

 

result1 = (num1 == 10 && num2 == 12); 의 문장에서 알 수 있듯이 논리 연산자보다 관계 연산자가 먼저 진행이 된다.

1. num1 == 10에서 1 또는 0 반환,  num2 == 12에서도 마찬가지.

2. 두 == 연산의 반환 값을 대상으로 && 연산 진행

3. result에 &&연산의 결과 저장.