컴퓨터 프로그래밍/C

C언어 관계 연산자 / 논리 연산자 / 대입 연산자

나노콛 2019. 7. 18. 13:57

1

primary

 ( )

[ ]

.

->

 

 

 

오른쪽

2

단항

*

&

!

++

-- 

(datatype)

sizeof

왼쪽

3

승법

*

%

/

 

 

 

 

오른쪽

4

가법

+

-

 

 

 

 

 

오른쪽

5

관계

<

>

<=

>=

 

 

 

오른쪽

6

등가

==

!=

 

 

 

 

 

오른쪽

7

논리곱

&&

 

 

 

 

 

 

오른쪽

8

논리합

||

 

 

 

 

 

 

오른쪽

9

대입

=

+=

-=

*=

%=

/=

 

왼쪽


관계 연산자

#include <stdio.h>

int main()
{
 int a = 6;
 int b = 4;

 printf("%d \n",a < b); //a 가 b 보다 작은가
 printf("%d \n",a <= b);//a 가 b 보다 작거나 같은가
 printf("%d \n",a > b); //a 가 b 보다 큰가
 printf("%d \n",a >= b);//a 가 b 보다 크거나 같은가
 printf("%d \n",a == b);//a 와 b 가 같은가 
 printf("%d \n",a != b);//a 와 b 가 다른가

 return 0;
}

C언어에서 참과 거짓을 나타내는 것은
0은 거짓
보통은 1이 참으로 알고 계시지만 0 이외의 수는 참으로 판단을 합니다.

이 관계연산자의 기준이 되는 것은 앞에 위치한 것이 됩니다.

주의사항은 <=  를 =< 이렇게 쓸 수 없으며
< = 이렇게 중간을 띄워서도 쓸 수 없습니다.
같다는 조건이 뒤에 간다는 것을 기억하시면 되겠습니다.

그러면 위의 내용은 맞으면 참이 나오고 틀리면 거짓이 출력되겠죠
차례대로 보면
0
0
1
1
0
1

이렇게 나오게 됩니다.



논리 연산자

#include <stdio.h>

int main()
{
 int a = 0;
 int b = 1;
 int c = -1;

 printf("%d \n",a || b); //논리합
 printf("%d \n",b || c);
 printf("%d \n",a && b); //논리곱
 printf("%d \n",b && c);
 printf("%d \n",!a);  //부정(반대)
 printf("%d \n",!b);

 return 0;
}

논리 연산자부터 확인해보겠습니다.

|| (or) - 둘 중에 하나라도 참이면 참
&& (and) - 두 개 참일 때 참
! (not) - 참이면 거짓 / 거짓이면 참

일단 위에서 설명했듯 0이면 거짓
0이 아닌 모든 수는 참이라고 했었습니다.
이것을 전제로 위의 소스를 확인해봅시다.

a는 거짓
b는 참
c도 참입니다.

그래서 차례대로 보면
1
1
0
1
1
0

이렇게 출력이 됩니다.


대입 연산자

#include <stdio.h>

int main()
{
 int a = 4;
 int result1 = 0;
 int result2 = 0;
 int result3 = 0;

 result1 += a;
 result2 = result2 + a;
 result3 -= a;

 printf("result1 : %d\n",result1);
 printf("result1 : %d\n",result2);
 printf("result1 : %d\n",result3);
 return 0;
}

result1 = result1 + a; 이 소스 코드와 result1 += a; 이 소스 코드는 동일합니다.
그러면 두 번째 result2 = result2 +a; 이 코드를 result2 +=a; 이렇게 하면 똑같아집니다.
그 아래 코드도 마찬가지입니다.

그러면
result1에는 4
result2에는 4
result3에는 -4
가 됩니다.


문제

#include <stdio.h>

int main()
{
 int x = 1;
 int y = 2;
 int z = 4;

 printf("%d\n",x || y && z);
 printf("%d\n",x > y || z == y && x < z);
 printf("%d\n",x != y && y +1 == !z + 4);
 printf("%d\n",y -1 == 3 || y + 1 == 3);

 return 0;
}
 #include <stdio.h>

int main()
{
 int i,j,k;
 i=j=k=3;

 printf("%d\n",k %= i);
 printf("%d\n",i += j);
 printf("%d\n",k = (i / 2) + (j / 2));

 printf("i:%d j:%d k:%d\n",i,j,k);
 
 return 0;
}

결과가 어떻게 나오는 것보다
어떤 순서가 먼저 연산이 되는지 확인해보시기 바랍니다.
위의 연산자 우선 순위표를 보시면 됩니다.

728x90