코린이
Day5 본문
반응형
연산자
저번에 산술연산자까지 공부를 하였고 다음으로는 복합 대입, 증감, 비교, 논리 연산자에 대해 공부하겠습니다.
먼저 복합 대입 연산자란 모두 두 개의 피연산자를 가지는 이항 연산자이며, 이 연산자들의 결합 방향은 오른쪽에서 왼쪽이다.
+=: 왼쪽의 피연산자에 오른쪽의 피연산자를 더한 후, 그 결괏값을 왼쪽의 피연산자에 대입
-+: 왼쪽의 피연산자에서 오른쪽의 피연산자를 뺀 후, 그 결괏값을 왼쪽의 피연산자에 대입 *=: 왼쪽의 피연산자에 오른쪽의 피연산자를 곱한 후, 그 결괏값을 왼쪽의 피연산자에 대입 /=: 왼쪽의 피연산자에 오른쪽의 피연산자를 나눈 후, 그 결괏값을 왼쪽의 피연산자에 대입 %=: 왼쪽의 피연산자에 오른쪽의 피연산자를 나눈 후, 그 결괏값을 왼쪽의 피연산자에 대입 |
소스코드
#include<stdio.h>
int main(){
int num = 6;
num += 5;
printf("num의 값: %d",num); //num = 11
return 0;
}
다음으로는 증감 연산자란 다른 연산자들과는 다르게 피연자가 한 개이다.
증감 연산자는 피연산자가 단 하나뿐인 단항 연산자이다.
++num(전위 증가 연산자): 피연산자의 값을 1 증가시킨 후, 연산을 진행
num++(후위 증가 연산자): 연산을 먼저 진행하고 나서 피연산자의 값을 1증가 --num(전위 감소 연산자): 피연산자의 값을 1 감소시킨 후, 연산을 진행 num--(후위 감소 연산자): 연산을 먼저 진행하고 나서 피연산자의 값을 1감소 |
소스코드
#include<stdio.h>
int main(){
int n1 = 8, n2 = 5, n3;
n3 = n1++ + ++n2;
printf("%d %d %d\n",n1,n2,n3);
return 0;
}
증감 연산을 응용해 보았다.
소스코드
#include<stdio.h>
int main(){
int a = 5, b = 6, c = 10, d;
d = ++a * b--; // 6*6 = 36
printf("%d %d %d %d\n",a,b,c,d);
d = a++ + ++c - b--; // 6 + 11 - 5 = 12
//a =7, b=4, c=11, d=12
printf("%d %d %d %d\n",a,b,c,d);
return 0;
}
다음으로는 비교 연산자로 연산의 결과가 참을 경우 1, 거짓일 경우 0을 반환한다.
비겨 방법은 왼쪽의 피연산자와 오른쪽의 피연산자를 비교하여 어느 쪽이 더 큰지, 작은지 아니면 서로 같은지 비교하는 연산자이다. 비교 연산자는 두 개의 피연산자를 가지는 이항 연산자이고 이 연산자들의 방향은 왼쪽에서 오른쪽이다.
==: 왼쪽의 피연산자와 오른쪽의 피연산자가 같으면 1을 반환
!=: 왼쪽의 피연산자와 오른쪽의 피연산자가 같지 않으면 1을 반환 > : 왼쪽의 피연산자가 오른쪽의 피연산자보다 크면 1을 반환 >=: 왼쪽의 피연산자가 오른쪽의 피연산자보다 크거나 같으면 1을 반환 < : 왼쪽의 피연산자가 오른쪽의 피연산자보다 작으면 1을 반환 <=: 왼쪽의 피연산자가 오른쪽의 피연산자보다 작거나 같으면 1을 반환 |
소스코드
#include<stdio.h>
int main(){
int num1 = 10, num2 = 20, num3 = 4, num4 = 13, num5 = 4;
printf("%d\n",num1 == num2); // 0
printf("%d\n",num4 != num1); // 1
printf("%d\n",num4 > num2); // 0
printf("%d\n",num5 >= num3); // 1
printf("%d\n",num1 < num4); // 1
printf("%d\n",num3 <= num1); // 1
return 0;
}
마지막으로 논리 연산자로 주어진 논리식으로 판단해 참(True)과 거짓(False)을 결정한다.
C언어에서 거짓은 0이며 0이 아닌 모든 것은 참으로 판정된다.(개인적으로 논리 연산자가 비트 연산이랑 비슷해서 많이 어려웠다...)
&&(논리 AND 연산): 논리식이 모두 참이면 1을 반환, 둘 중 하나라도 거짓이면 0을 반환
||(논리 OR 연산): 논리식이 하나라도 참이면 1을 반환 ! (논리 NOT 연산): 참이면 거짓, 거짓이면 참으로 반환 ※ 논리 NOT 연산의 경우는 피연산자가 한 개만 존재한다. ※ 논리 AND 연산의 경우 왼쪽의 논리식이 거짓일 경우 오른쪽의 논리식은 진해되지 않는다. ※ 논리 OR 연산의 경우 왼쪽의 논리식이 참일 경우 오른쪽의 논리식은 진행하지 않는다. |
소스코드
#include<stdio.h>
int main(){
int num1 = 10, num2 = 20, num3 = 4, num4 = 13, num5 = 4;
printf("%d\n",num5 >=num3 || num1 == num2); // 1 || 0 = 1 왼쪽의 논리식이 참이므로 오른쪽 논리식은 실행을 안한다.
printf("%d\n",num4 != num1 && num1 < num4); // 1 && 1 = 1
printf("%d\n",num4 > num2 && num3 == num5); // 0 && 1 = 0 왼쪽의 논리식이 거짓이므로 오른쪽의 논리식을 실행 안한다.
printf("%d\n",!num5 > num3); // !4 > 4 = 0 > 4 = 0
printf("%d\n",!(num1 > num4) || num3 <= num1); // 1 || 1 = 1
return 0;
}
증감 연산자와 논리 연산을 함께 사용해 본 코드
소스코드
#include<stdio.h>
int main(){
int a = 1, b = 0, c = 12, d = 12;
d = a++ || ++b * d-- / ++c; // 1 || 1 * 12 / 13 = 1 || 0 = 1
//a =2 ,b = 1 ,c = 13 d =11
d = b++ && ++a / ++c * d++; // 1 && 3 / 14 * 11 = 1 = 1 && 0 * 11 = 0
// a =3, b= 2, c= 14, d= 13
return 0;
}
반응형
Comments