본문 바로가기
  • Eigenspace of Knowledge
CS/C언어

[C언어] 4. 연산자(1) - 산술, 대입, 복합대입, 증감, 관계/논리, 조건

by eigenarea 2024. 6. 4.
반응형

0.시작하기 앞서

이번 포스팅에서는 산술, 대입, 복합대입, 콤마 연산자와 같이 이미 알거나 다룬내용은 물론 

증감, 관계, 논리, 조건, 비트 연산자 역시 다룰 것이다.

 

-피연산자수에 따른 연산자 분류

단항연산자: 피연산자 수가 1개. 대표적으로는 증감연산자가 있다.

ex) x++, x--, ++x, --x

 

이항연산자: 피연산자 수가 2개. 우리가 다루는 대부분의 연산이 이항이다

ex) x< y, x+y, x=y 등

 

삼항연산자: 피연산자 수가 3개. 대표적으로는 조건연산자가 있다.

ex) x? y : z

 

 

1. 산술, 대입, 콤마연산자

 

산술연산이란 덧셈, 나눗셈과 같이 기본적인 연산을 의미한다.

산술연산 연산자  c에서의 수식 수학에서의 기호
덧셈 + x+y x+y
뺄셈 - x-y x-y
곱셈 * x*y xy 혹은 x×y
나눗셈  / x/y x/y 혹은 x÷y
나머지 % x%y x mod y

 

대입연산(assignment operation)은 변수에 값을 저장해주는 연산이다.

앞서 소개한 변수 초기화 역시 대입연산에 해당된다. (변수에 값을 저장했으니..)

대입연산은 오른쪽에서 왼쪽 방향으로 이루어지며, 기호는 '='이다.(수학 기호인 =와는 다르다.)

 

구체적인 내용은 https://eigenarea.tistory.com/5 를 참조하자.

 

콤마연산자(,)는 말그대로 콤마로 내용을 구분시켜주는 연산자이다.

콤마 왼쪽에서 오른쪽 순으로 실행된다.

ex)

x=(2+5,5-2);
printf("%d",x);

>>>3 //콤마 뒤에 실행된 5-2가 결과값으로서 나옴

x=2+5,5-2;
printf("%d",x);

>>>7 //x=2+5라는 대입연산 후에, 5-2라는 아무의미없는 산술연산을 한 결과이다

printf("Thank"),printf(" You");

>>>Thank You //Thank를 출력한 후에  You를 출력함

 

2. 복합대입연산자

복합대입연산자란 산술연산자 등의 연산자와 대입연산자를 합쳐놓은 연산자이다.

예를 들어 x+=y라면, x에 더할(+)값은(=) y라는 의미이다.

 

의미 연산자
x = x + y x += y
x = x - y x -= y
x = x * y x *= y
x = x / y x /= y
x = x % y x %= y
x = x & y x &= y
x = x | y x |= y
x = x ^ y x ^= y
x = x >> y x >>= y

 

 

3. 증감연산자

 

 

 

위의 표에서 상술한 것과 같이 pre-fix의 경우ㅍ(++x, --x) x에 1을 더하거나 뺀 연산이 명령어에서 즉각 반영되어 결과로 나타나지만, post-fix의 경우(x++, x--) 계산 결과가 즉각 반영되지 않고, 다음 명령어부터 변화된 x값이 적용된다.

 

x=1;
printf("%d",++x);

>>>2 //계산결과가 바로 반영된다.


x=1;
printf("%d",x++);
printf("%d",x);

>>>
1
2 //계산결과가 명령어에서 바로 반영되지않고 다음 명령어부터 반영된다.

 

4. 관계 / 논리연산자

-관계연산자

관계연산자란 두 피연산자를 비교하는 연산자

 

결과가 참(true)이면 1을 결과값으로 내고 거짓(false)이면 0을 결과값으로 낸다.

 

연산자 의미 사용 예
== x와 y가 같은가? x == y
!= x와 y가 다른가? x != y
> x가 y보다 큰가? x > y
< x가 y보다 작은가? x < y
>= x가 y보다 크거나 같은가? x >= y
<= x가 y보다 작거나 같은가? x <= y

 

printf("%d", 1==2);
>>>0 //거짓

printf("%d", 1!=2);
>>>1 //참

printf("%d", 1<2);
>>>1 //참

printf("%d", 1>2);
>>>0 //거짓

printf("%d", (3>=2)+1);
>>>2 //1(참) +1

 

-논리연산자

논리연산자란 여러 개의 조건을 조합하여 참, 거짓을 따지는 연산

마찬가지로 결과값은 참이면 1, 거짓이면 0

 

피연산자의 경우 0이면 거짓, 0이 아니면 참 (3 ->참, -1 ->참)

사용 예 의미
x && y AND연산, x와 y 모두 참이면 참, 그렇지 않으면 거짓
x || y OR연산, x나 y 중 하나라도 참이면 참, 모두 거짓이면 거짓
!x NOT연산, x가 참이면 거짓, 거짓이면 참

 

 

ex) x=-1, y=0이라 했을 때,

x&&y == 0 (거짓)

x || y == 1 (참) 

!x == 0 (거짓)

!y == 1 (참)

 

주의할 점

2<x<5 와 같은 비교연산자를 입력했을 경우 논리적으로 잘못된 명령어이다.

2<x<5는 ((2<x)<5)라는 의미로 2<x는 무조건 0 or 1이므로 (2<x)<5는 1이 된다.

 

바른 표현으로는 (2<x) && (x<5)가 있다.

 

 

5. 조건연산자

exp1 ? exp2 : exp3

조건연산자는 위와 같이 exp1의 값이 참이면 exp2를 반환하고 거짓이면 exp3를 반환하는 연산자이다.

 

이는 다양하게 사용할 수 있는데,

absolute_value = (x>0)? x : -x; //절댓값 계산

max_value = (x>y)? x : y; //최댓값 계산

min_value = (x<y)? x : y; //최솟값 계산

 

등등 여러가지 간편하게 사용할 수 있다.