입출력 함수와 연산자 - 2
연산자의 기능과 사용방법, 우선순위.
학습 목표
- 연산자.
- 연산자의 우선순위 이해.
주요 용어
- 연산자 (operator) : 임의의 자료에 대해 각종 연산을 수행하도록 하는 기호.
- 이항 연산자 : 2개의 자료를 재상으로 산술적인 처리를 수행하는 연산자.
- 단항 연산자 : 1개의 자료만을 대상으로 산술적인 처리를 수행하는 연산자.
- 관계 연산자 : 피 연산자에 대한 대.소 관계를 비교하는 연산자.
- 논리 연산자 : 피 연산자에 대한 논리연산(AND, OR, NOT)을 수행하는 연산자.
- 대입 연산자 : '='를 사용하여, 연산자의 오른쪽을 왼쪽에 대입하는 데 사용.
- 조건 연산자 : 주어진 조건의 만족여부에 따라 지정된 수식을 수행하는 연산자.
- 비트 연산자 : 수치를 2진수로 변환하여 bit 단위의 연산을 수행하는 연산자.
- 기타 연산자 : sizeof(), cast(형변환), &(주소 연산자), *(내용 연산자) 등.
- 연산자 우선순위 : 모든 연산자에는 연산자 우선순위가 정해져 있음.
연산자
임의의 자료에 대해 각종 연산을 수행하도록 하는 기호.
- 연산자의 종류
구분 | 연산자 |
---|---|
산술 연산자 | + - * / % ++ -- |
관계 연산자 | > < >= <= == != |
논리 연산자 | & || ! |
대입 연산자 | += -= *= /= %= <<= >>= != |
조건 연산자 | ?: |
비트 연산자 | & | ^ ~ << >> |
기타 연산자 | sizeof() cast & . |
#include <stdio.h>
int main()
{
int x, y;
x = 10, y = 3;
printf("x + y = %d\n", x + y);
printf("x / y = %d\n", x / y);
printf("x %% y = %d\n", x % y);
printf("y %% x = %d\n", y % x);
return 0;
}
산술 연산자
피 연산자에 대해 사칙연산을 포함한 각종 산술연산을 수행하는 연산자.
구분 | 연산자 | 기능 | 예 |
---|---|---|---|
이항 연산자 | + - * / | 가 감 승 제를 계산 | i + 5 |
이항 연산자 | % | 나눗셈의 나머지 계산 | i % 5 |
단항 연산자 | - | 부호의 반전 | -5 |
단항 연산자 | ++ | 1 증가 | i++, ++i |
단항 연산자 | -- | 1 감소 | i--, --i |
#include <stdio.h>
int main()
{
int x = 5, a, b;
a = ++x * x--;
b = x * 10;
printf("a = %d b = %d x = %d\n", a, b, x);
return 0;
}
관계 연산자
피 연산자에 대한 대,소 관계를 비교하는 연산자.
연산자 | 기능 | 예 |
---|---|---|
== | 같은가의 여부 비교 | a == b : a와 b는 같다. |
!= | 다른가의 여부 비교 | a != b : a와 b는 같지 않다. |
> >= < <= | 대,소 관계 비교 | a >= b : a는 b보다 크거나 같다. |
#include <stdio.h>
int main()
{
int a = 4, b, c, d;
b = a > 2;
printf("b = %d\n", b);
c = a < 2;
printf("c = %d\n", c);
d = a == 4;
printf("d = %d\n", d);
return 0;
}
논리 연산자
피 연산자에 대해 논리 연산을 수행하는 연산자.
연산자 | 기능 | 예 |
---|---|---|
&& | 논리곱(AND) : 양쪽 모두 참일 때만 참 | a && b |
|| | 논리합(OR) : 양쪽 중 하나라도 참이면 참 | a || b |
! | 논리 부정(NOT) : 오른쪽이 참이면 거짓, 거짓이면 참 | !a |
#include <stdio.h>
int main()
{
int a = 4, b = 7, c, d, e;
c = a > 2 & b <= 7;
printf("c = %d\n", c);
d = a < 2 || b <= 7;
printf("d = %d\n", d);
e = !a;
printf("e = %d\n", e);
return 0;
}
대입 연산자
연산자의 오른쪽을 왼쪽에 대입하는 연산자.
연산자 | 예 | 기능 |
---|---|---|
= | a = 5 | a에 5를 대입 |
+= | a += 5 | a += 5 더한 후 결과를 대입 |
-= | a -= 5 | a -= 5 뺀 후 결과를 대입 |
*= | a *= 5 | a *= 5 곱한 후 결과를 대입 |
/= | a /= 5 | a /= 5 나눈 후 결과를 대입 |
%= | a %=5 | a %=5 나눈 후 그 나머지를 대입 |
&= | a &= 5 | a &= 5 bit 단위 AND 연산을 한 후 결과를 대입 |
|= | a |= 5 | a |= 5 bit 단위 OR 연산을 한 후 결과를 대입 |
^= | a ^= 5 | a ^= 5 bit단위 XOR 연산을 한 후 결과를 대입 |
<<= | a <<= 5 | a <<= 5 a의 값을 5 bit 좌로 이동 후 결과를 대입 |
>>= | a >>= 5 | a >>= 5 a의 값을 5비트 우로 이동 후 결과를 대입 |
#include <stdio.h>
int main()
{
int a = 10, b = 3, c = 1;
a *= (b - 1);
b /= 2 + 3;
c += 2;
printf("a = %d, b = %d, c = %d\n", a, b, c);
return 0;
}
조건 연산자
주어진 조건의 만족 여부에 따라 지정된 수식을 수행하는 연산자.
- 형식 : (조건) ? 수식1 : 수식2;
- 기능 : 조건이 성립하면 수식1, 성립하지 않으면 수식2를 실행
- 사용 예 : x = (5 > 2) ? 1 : 0;
#include <stdio.h>
int main()
{
int a = 10, b;
b = (a > 15) ? (a + 1) : (a - 1);
printf("b = %d\n", b);
return 0;
}
비트 연산자
수치에 대해 bit 단위의 연산을 수행하는 연산자.
연산자 | 예 | 기능 |
---|---|---|
& (bit AND) | a & b | 두 bit가 모두 1일 때만 1 |
| (bit OR) | a | b | 두 bit중 하나라도 1이면 1 |
^ (bit XOR) | a ^ b | 두 bit가 서로 다를 때만 1 |
~ (bit NOT) | ~a | 1은 0, 0은 1로 치환 |
<< (bit 좌로 이동) | a << 2 | 2 bit 왼쪽으로 이동 |
>> (bit 우로 이동) | a >> 2 | 2 bit 오른쪽으로 이동 |
비트 연산의 예
x | -> | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 |
y | -> | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 |
x & y | -> | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
x | y | -> | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 |
x ^ y | -> | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 |
~x | -> | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 |
x << 2 | -> | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 |
x >> 2 | -> | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 |
기타 연산자
연산자 | 기능 |
---|---|
sizeof() | 지정한 자료형, 수식, 변수가 차지하는 기억공간의 크기(byte)를 구함 |
cast(형변환) | 지정한 자료형을 다른 자료형으로 강제정으로 바꿈 |
& | 주소 연산자로 피 연산자의 주소를 나타냄 |
* | 내용 연산자로 피 연산자의 내용을 가져옴 |
sizeof()
- 형식 : sizeof(자료)
- 기능 : 지정한 자료(자료형, 상수, 변수, 수식)에 대한 기억 장소의 크기를 구함
- 사용 예 : sizeof(int)
#include <stdio.h>
int main()
{
float a = 3.14;
printf("sizeof data type int : %d byte\n", sizeof(int));
printf("sizeof a, type of float : %d byte\n", sizeof(a));
// printf("b = %d", b);
return 0;
}
cast()
- 형식 : (형명칭) 자료;
- 기능 : 이미 지정된 자료의 자료형을 강제적으로 다른 자료형으로 변환한다.
- 사용 예 : (float) i / j
#include <stdio.h>
int main()
{
int a = 3, b = 4;
double c;
c = (double)a / b;
printf("result : %f\n", c);
return 0;
}
연산자 우선 순위
연산자 명 | 연산자 | 결합방향 | 우선순위 |
---|---|---|---|
괄호, 구조체, 공용체 연산자 | () [] -> | 좌 -> 우 | 높음 |
단항 연산자 | ! ~ ++ -- & * sizeof() cast | 우 -> 좌 | |
승, 제 (이항 연산자) | * / % | 좌 -> 우 | |
가, 감 (이항 연산자) | + - | 좌 -> 우 | |
비트 이동 (이항 연산자) | << >> | 좌 -> 우 | |
대 소 비교 (이항 연산자) | < <= > >= | 좌 -> 우 | |
등가 판정 (이항 연산자) | == != | 좌 -> 우 | |
bit AND (이항 연산자) | & | 좌 -> 우 | |
bit XOR(이항 연산자) | ^ | 좌 -> 우 | |
bit OR(이항 연산자) | | | 좌 -> 우 | |
논리 AND (이항 연산자) | && | 좌 -> 우 | |
논리 OR(이항 연산자) | || | 좌 -> 우 | |
조건 연산자 | ?: | 우 -> 좌 | |
대입 연산자 | = += *= ... &= | 우 -> 좌 |
#include <stdio.h>
int main()
{
int a, b, c;
a = 10;
b = 20;
c = 30;
printf("a + b * c = %d\n", a + b * c);
printf("a = b += 2 * c => a = %d\n", a = b += 2 * c);
printf("a = ( b > c ) ? b : c => a = %d\n", a = (b > c) ? b : c);
printf("a / b * c = %d\n", a / b * c);
printf("a *= b = c + 5 => a = %d\n", a *= b = c + 5);
return 0;
}
728x90
반응형
'Language > C' 카테고리의 다른 글
[C] 함수와 기억 클래스 - 1 (0) | 2020.12.20 |
---|---|
[C] 선택 제어문과 반복 제어문 (0) | 2020.12.20 |
[C] 입출력 함수와 연산자 - 1 (0) | 2020.12.15 |
[C] 자료형과 선행 처리기 (0) | 2020.12.14 |
[C] C 언어의 개요 (0) | 2020.12.13 |