연산자
남기용 47

대입연산자와 산술 연산자

대입

=

대입연산자 오른쪽에 있는 값을 왼쪽에 대입한다.
ex) num = 10;

더하기

+

왼쪽의 값에 오른쪽의 값을 더한다.
ex) num + 30;

빼기

-

왼쪽의 값에 오른쪽의 값을 뺀다.
ex) num - 20;

곱하기

*

왼쪽의 값과 오른쪽의 값을 곱한다.
ex) num * 5;

나누기

/

왼쪽의 값을 오른쪽의 값으로 나눈다.
ex) num / 7;

나머지

%

왼쪽의 값을 오른쪽의 값으로 나눴을때 얻게되는 나머지를 반환한다.
ex) num % 3;

위와 같이 연산에 필요한 피연산자가 2개인 연산자를 가리켜 이항연산자 라고 합니다.

#include <stdio.h>

int main(void) {
    int a = 11, b = 4;
    printf("%d + %d = %d \n", a, b, a + b);
    printf("%d - %d = %d \n", a, b, a - b);
    printf("%d × %d = %d \n", a, b, a * b);
    printf("%d ÷ %d = %d \n", a, b, a / b);
    printf("%d ÷ %d 의 나머지 = %d \n", a, b, a % b);
    return 0;
}

0
9항에서 보면 11÷4의 값이 2.75가 아닌 2로 값이 출력되는 것을 볼 수 있습니다.
C언어에서는 정수 와 정수를 나누기 하게 되면 값이 정수가 되며 이때 소숫점 이하의 값은 버려지게 됩니다.
10행에서 보이는 % 연산자는 나눗셈의 나머지 값을 구하는 연산자 이며, %연산자는 실수형 자료형 연산에는 사용할 수 없고 정수형 자료형 연산에서만 사용할 수 있습니다.


복합 대입 연산자

복합 대입 연산자란 2항 연산결과를 자신에게 대입하는 연산자 입니다.
다음과 같은 연산자가 있습니다.

+=

-=

*=

/=

%=

<<=

>>=

&=

^=

|=


#include <stdio.h>

int main(void) {
    int a = 2;
    int b = 4;
    int c = 8;

    a += 3; // a = a + 3 과 같음
    b *= 4; // b = b * 4 과 같음
    c %= 3; // c = c % 3 과 같음

    printf("a = %d, b = %d, c = %d\n", a, b, c);
    return 0;
}

0
복합 대입 연산자의 의미는 위의 코드에서 보듯이 a += 3; 일경우 a = a + 3; 과 같은 의미인 것을 이해할 수 있을 것입니다.


부호 연산자

부호 연산자에는 +, - 가 있습니다.
+-는 이항연산자에서는 덧셈과 뺄셈을 의미하지만, 피연산자가 한개인 단항 연산자로는 부호를 나타냅니다.

#include <stdio.h>

int main(void) {
    int a = +4; // 부호 연산자 +
    int b = -7; // 부호 연산자 -

    a = -a;
    printf("a의 값 : %d\n", a);

    b = -b;
    printf("b의 값 : %d\n", b);

    a += b; // 복합 대입연산 a = a + b; 와 같음
    printf("복합대입연산 a += b 의 값 : %d\n", a);
    return 0;
}

0
a = -a;과 b = -b;은 부호 연산자인 -연산을 하여 각 변수값의 부호가 바뀐것을 알 수 있습니다.
13행은 += 임으로 부호 연산이 아닌 복합 대입 연산자를 사용한 것입니다.


증감연산자

++num

변수 num에 값을 1 증가 후, 속한 문장의 나머지를 진행

(선 증가, 후 연산)

num++

속한 문장을 먼저 진행한 후, 변수 num에 값을 1증가

(선 연산, 후 증가)

--num

변수 num에 값을 1 감소 후, 속한 문장의 나머지를 진행

(선 감소, 후 연산)

num--

속한 문장을 먼저 진행한 후, 변수 num에 값을 1감소

(선 연산, 후 감소)

위의 표에서 보듯이 ++, -- 연산자는 이름 그대로 값을 1 증가 하거나 감소를 합니다.
그런데 증감연산자의 삽입된 위치에 따라 그 의미가 달라지는데
변수의 왼편에 붙는경우 (++num) 전위연산 이라 하고
변수의 오른편에 붙는경우 (num++) 후위연산 이라 하며
전위 연산의 경우 문장을 진행하기 전에 먼저 증감연산을 한 후 진행이 되고
후의 연산의 경우 문장을 다 진행한 후에 증감 연산을 합니다.

#include <stdio.h>

int main(void) {
    int a = 5;
    int b = 7;

    printf("a = %d\n", a);
    printf("a++ = %d\n", a++);// 후위연산
    printf("a = %d\n\n", a);

    printf("b = %d\n", b);
    printf("--b = %d\n", --b); // 전위연산
    printf("b = %d\n\n", b);

    return 0;
}

0


관계 연산자

관계연산자는 대소 와 동등의 관계를 따지는 연산자입니다.

<

ex) n1 < n2
n1이 n2보다 작은가?

>

ex) n1 > n2
n1이 n2보다 큰가?

==

ex) n1 == n2
n1이 n2와 같은가?

!=

ex) n1 != n2
n1이 n2와 다른가?

<=

ex) n1 <= n2
n1이 n2보다 작거나 같은가?​

>=

ex) n1 >= n2
n1이 n2보다 크거나 같은가?​

관계연산자는 조건을 만족하면 1만족하지 않으면 0을 반환합니다.
C언어에서 0은 false(거짓)을 의미하고 0을 제외한 모든 수는 true(참)을 의미합니다.

#include <stdio.h>

int main(void) {
    int a = 10;
    int b = 12;
    int result1, result2, result3;

    result1 = a == b;
    result2 = a <= b;
    result3 = a > b;

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

0
조건을 만족하지 않으면 거짓(0)을 반환하고,
조건을 만족하면 참(1)을 반환합니다.


논리연산자

&&

ex) A && B
A와 B가 모두 참이면 참(1)을 반환 (논리 AND)

||

ex) A || B
A와 B중 하나라도 참이면 참(1)을 반환 (논리 OR)​

!

ex) !A
A가 참일경우 거짓(0)을 반환, A가 거짓일경우 참(1)을 반환 (논리 NOT)​


#include <stdio.h>

int main(void) {
    int a = 10;
    int b = 12;
    int result1, result2, result3;

    result1 = (a == 10) && (b == 12); // 둘다 참임으로 1을 반환
    result2 = (a < 12) || (b > 12); // (a < 12)보다 작음으로 b > 12
    result3 = !a;

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

0
result1은 둘다 모두 참이기 때문에 1
result2는 (a < 12) 참이기 때문에 1이며, (b > 12)는 연산하지 않습니다.
result3은 0이 아닌 모든 수(음수도 포함)는 참이기 때문에 0


조건 연산자(3항 연산자)

조건 연산자는 3항 연산자이고 다음과 같은 형태를 갖습니다.

조건식 ? 참일때 실행할 코드 : 거짓일때 실행할 코드;

조건 연산자는 if else 문과 유사하고 단지 기호를 써서 간략히 표현할 수 있다는 장점이 있습니다.
조건식에 따라 분기하여 실행할 코드를 간략히 표현할 수 있습니다.
중첩해서 사용하면 가시성이 떨어질수 있습니다.


sizeof

sizeof 연산자는 기본자료형에 설명하였듯이 자료형 또는 변수의 크기를 구하는 연산자 입니다.


기타 연산자들

포인터에서 다루게 될 *(간접지정 연산자), &(주소 연산자)
자료형 변환에 사용되는 () 명시적 형변환연산자 등이 있습니다.

연산자 논리 조건연산자 3항연산자
제목
글쓴이
남기용
작성일
조회수
12
제목
글쓴이
남기용
작성일
조회수
27
제목
글쓴이
남기용
작성일
조회수
15
제목
글쓴이
남기용
작성일
조회수
47
제목
글쓴이
남기용
작성일
조회수
73
제목
글쓴이
남기용
작성일
조회수
17
제목
글쓴이
남기용
작성일
조회수
16
제목
글쓴이
남기용
작성일
조회수
36
제목
글쓴이
남기용
작성일
조회수
72
회원로그인 후 댓글을 작성하실 수 있습니다. 로그인
© 2021 ezcode all right reserved.