문제를 푸는 데에 있어서 연산자 사용에 관해 부족함이 있어 개념을 정리해보았다.
두 개의 피연산자를 요구하는 연산자를 가리켜 '이항 연산자'라고 한다.
대입 연산자와 산술 연사자는 모두 이항 연산자이다.
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에 &&연산의 결과 저장.