본문 바로가기

코린이

Day5 본문

C언어/C언어 기본문법

Day5

winsome99 2022. 11. 4. 02:58
반응형

 

연산자

저번에 산술연산자까지 공부를 하였고 다음으로는 복합 대입, 증감, 비교, 논리 연산자에 대해 공부하겠습니다.

먼저 복합 대입 연산자 모두 두 개의 피연산자를 가지는 이항 연산자이며, 이 연산자들의 결합 방향은 오른쪽에서 왼쪽이다.

+=: 왼쪽의 피연산자에 오른쪽의 피연산자를 더한 후, 그 결괏값을 왼쪽의 피연산자에 대입
-+: 왼쪽의 피연산자에서 오른쪽의 피연산자를 뺀 후, 그 결괏값을 왼쪽의 피연산자에 대입
*=: 왼쪽의 피연산자에 오른쪽의 피연산자를 곱한 후, 그 결괏값을 왼쪽의 피연산자에 대입
/=: 왼쪽의 피연산자에 오른쪽의 피연산자를 나눈 후, 그 결괏값을 왼쪽의 피연산자에 대입
%=: 왼쪽의 피연산자에 오른쪽의 피연산자를 나눈 후, 그 결괏값을 왼쪽의 피연산자에 대입

 

소스코드

#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;
}
 

 

 

반응형

'C언어 > C언어 기본문법' 카테고리의 다른 글

Day7  (0) 2022.11.04
Day6  (0) 2022.11.04
Day4  (0) 2022.11.03
Day3  (0) 2022.11.02
Day02  (0) 2022.11.01
Comments