1. 연산자란?
C 언어에서 제공되는 연산자에는 여러가지가 있습니다. 산술연산자, 대입연산자, 증감연산자, 관계연산자, 논리연산자, 비트연산자, 조건연산자등이 있습니다. 이러한 연산자들은 프로그램의 수식에 사용되며 동시에 여러 개의 연산자가 선언되어 어떤 연산자부터 계산할 것인지 우선 순위을 두어 순서대로 연산이 이루어집니다.
연산자 우선순위표
비트 연산자
우선순위 | 연산자 | 설명 | 동일 순위 |
높음 ↑ ↓ 낮음 |
( ) [ ] . -> | 일차식 | 왼쪽 -> 오른쪽 |
! ~ ++ -- +(부호) -(부호) * & (type) sizeof | 단항 연산자 | 오른쪽 -> 왼쪽 | |
* / % | 산술 연산자 | 왼쪽 -> 오른쪽 | |
+ - | 산술 연산자 | 왼쪽 -> 오른쪽 | |
<< >> | 비교 연산자 | 왼쪽 -> 오른쪽 | |
< <= > >= | 비교 연산자 | 왼쪽 -> 오른쪽 | |
== != | 관계 연산자 | 왼쪽 -> 오른쪽 | |
& | 비트 연산자 | 왼쪽 -> 오른쪽 | |
^ | 비트 연산자 | 왼쪽 -> 오른쪽 | |
| | 비트 연산자 | 왼쪽 -> 오른쪽 | |
&& | 논리 연산자 | 왼쪽 -> 오른쪽 | |
|| | 논리 연산자 | 왼쪽 -> 오른쪽 | |
? : | 조건 연산자 | 오른쪽 -> 왼쪽 | |
= += -= *= /= %= &= ^= |= <<= >>= | 대입 연산자 | 오른쪽 -> 왼쪽 | |
, | 콤마 연산자 | 왼쪽 -> 오른쪽 |
위 표와 같이 연산자의 우선순위을 알수 있듯이 연산자는 괄호, 단항 연산자, 이항 연산자, 조건 연산자 순서로 우선순위가 정해집니다.
지금 부터 각각의 연산자의 종류에 대해서 알아 보겠습니다.
2. 산술연산자
산술 연산자는 가장 기본적인 계산으로 덧셈, 뺄셈, 곱셈, 나눗셈, 나머지 연산을 합니다.
연산자 | 계산식 (a=7, b=3) | 결과 |
+ | c = a + b; | 10, a와 b를 더한 값을 출력 |
- | c = a - b; | 4, a에서 b를 뺀 값을 출력 |
* | c = a * b; | 21, a와 b를 곱하여 값을 출력 |
/ | c = a / b; | 2, a에서 b를 나눔 몫의 값을 출력 |
% | c = a % b; | 1 a에서 b로 나눈 나머지의 값을 출력 |
3. 대입연산자와 혼합 대입 연산자
대입 연산자는 연자자 중에서 가장 많이 사용되는 연산자로 오른쪽에 있는 값을 왼쪽에 대입하는 단순 대입연사자 '='입니다. 혼합 대입 연산자는 +=, -=, *=, /= 등으로 사용됩니다. 예를 들어 "a+=5;" 라는 혼합 대입 연산자는 일반식으로 풀어 쓰면 "a = a + 5;"와 같습니다. "a + 5"연산 한 후에 a에 대입하는 것으로 일반식 보다 혼합 대입 연산자를 사용하는 것이 간결하게 표현할 수 있습니다.
연산자 | 계산식 (a=7, b=3) | 결과 ( a에 7을 대입하고 b에 3을 대입 ) |
+= | a += b; | 10, "a = a + b"로 a와 b를 더한 값을 a에 대입하고 출력 |
-= | a -= b; | 4, "a = a - b"로 a에서 b를 뺀 값을 a에 대입하고 출력 |
*= | a *= b; | 21, "a = a * b"로 a와 b를 곱하여 값을 a에 대입하고 출력 |
/= | a /= b; | 2, "a = a / b"로 a에서 b를 나눔 몫의 값을 a에 대입하고 출력 |
%= | a %= b; | 1, "a = a % b"로 a에서 b로 나눈 나머지의 값을 a에 대입하고 출력 |
4. 증감연산자
증감 연산자는 변수의 값에 1을 증가시킬 때에는 ++를 사용하고 1을 감소시킬 때에는 --를 사용하는 단항 연산자 입니다. 증감 연산자는 변수 앞이나 뒤에 증감 연산자가 들어가는데 앞에 들어가면 전위형 증감 연산자가되고 뒤에 들어가면 후위형 증감 연산가됩니다.
연산자 | 계산식 (a=7) | 결과 |
++ | b = ++a; | 8, a가 먼저 1이 증가하여 b에 대입 (전치 증가 연산자) |
b = a++; | 7, a가 b에 대입하고 나중에 1증가 (후치 증가 연산자) | |
-- | b = --a; | 6, a가 먼저 1이 감소하여 b에 대입 (전치 감소 연산자) |
b = a--; | 7, a가 b에 대입하고 나중에 1감소 (후치 감소 연산자) |
5. 관계연산자
관계 연산자는 연산자를 기준으로 왼쪽과 오른쪽의 크기를 비교하여 True(참)와 False(거짓) 출력하는 것으로 참이면 1을 출력하고 거짓이면 0을 출력하는 연산자 입니다.
연산자 | 계산식(a = 7, b = 3) | 설명 |
> | a > b; | 1, 7>3으로 7이 3보다 크므로 조건은 참 |
>= | a >= b; | 1, 7>=3으로 7이 3보다 크거나 같으므로 조건은 참 |
< | a < b; | 0, 7<3으로 7이 3보다 작지 않으므로 조건은 거짓 |
<= | a <= b; | 0, 7<=3으로 7이 3보다 작거나 같지 않으므로 조건은 거짓 |
== | a == b; | 0, 7==3으로 7과 3은 같지 않다. 그러므로 조건은 거짓 |
!= | a != b; | 1, 7!-3으로 7과 3은 같지 않으므로 조건은 참 |
6. 논리연산자
논리 연산자에는 and( && )연산자, or( || )연산자, not( ! ) 연산자가 있습니다. and 연산자는 두 개의 피연산자 모두 참일 때 참이고 둘 중에 하나라도 거짓이면 거짓을 반환하고 or연산자는 둘 중에 하나라도 참이면 참을 반환하고 두개 다 모두 거짓일 때만 거짓을 반화하고 not연산자는 참을 거짓으로 거짓을 참으로 반환하는 연산자입니다.
연산자 | 계산식(a = 7, b = 3) | 설명 |
&& | c = a > b && a < b; | 0, "참 and 거짓"으로 둘 중에 하나라도 거짓이므로 거짓 |
|| | c = a > b || a < b; | 1, "참 or 거짓"으로 둘 중에 하나라도 참이면 참 |
&& | c = a >= b && a <= b; | 0, "참 and 거짓"으로 둘 중에 하나라도 거짓이므로 거짓 |
|| | c = a >= b || a <= b; | 1, "참 or 거짓"으로 둘 중에 하나라도 참이면 참 |
! | c = !(a == b); | 1, "!(거짓)"으로 not 연산자에 의해 참 |
7. 비트연산자
비트 연산자는 데이터를 비트단위로 처리하는 연산자입니다. 비트 연산자에는 비트 논리 연산자와 비트 이동 연산자가 있습니다. 비트 논리 연산자에는 &(and), |(or), ^(xor),~(not)연산자가 있고 비트 이동 연산자에는 왼쪽 시프트(<<)연산자와 오른쪽 시프트(>>)연산자가 있습니다.
연산자 | 계산식(a = 11, b = 14) | 설명( a => 1011, b => 1110 ) |
& | c = a & b; | 10, 1011와 1110을 and연산을 하면 1010으로 10진수 10이 출력 |
| | c = a | b; | 15, 1011와 1110을 or연산을 하면 1111으로 10진수 15이 출력 |
^ | c = a ^ b; | 5, 1011와 1110을 xor연산을 하면 0101으로 10진수 5이 출력 |
~ | c = !a; | -12, 1011을 ~연산하면 11110100으로 음수 -12를 출력 |
>> | c = a >> 2; | 2, 1011을 오른쪽 시프트로 두번 이동 0010, 10진수 2 출력 |
<< | c = a << 2; | 44, 1011을 왼쪽 시프트로 두번 이동 101100, 10진수 44출력 |
8. 조건연산자
조건 연산자는 3개의 항으로 이루어져 있어 삼항 조건 연산자라고도 한다.
( 조건 )? 식1 : 식2; |
조건이 참이면 식1을 반환하고 거짓이면 식2를 반환합니다. 다음 예제를 통해 알아보겠습니다.
문제1] 두 개의 정수를 입력받아 +, -, *, /, % 플 출력하시오.
입력 예]
7 4
출력 예]
7 + 4 = 11
7 - 4 = 3
7 * 4 = 28
7 / 4 = 1
7 % 4 = 3
문제2] 세 개의 정수를 입력 받아 합계와 평균을 출력하시오. ( 단 평균은 소수 이하는 버리고 정수로 출력)
입력 예]
75 64 84
출력 예]
합계 : 223
평균 : 74
문제3] 두 개의 정수를 입력받아 앞이 크면 1, 뒤가 크면 0을 출력하시오. (관계 연산자)
입력 예] 입력 예]
3 2 2 3
출력 예] 출력 예
1 0
문제 4] 두 개의 정수를 입력받아 앞과 뒤가 같으면 0, 다르면 1을 출력하시오. ( 관계 연산자 )
입력 예] 입력 예]
3 2 2 2
출력 예] 출력 예
1 0
문제5] a, b 변수와 x, y 변수를 각각 만들어 각각 변수에 정수 값을 입력하여 a가 x보다 크고, b가 y보다 크면 1, 아니면 0을 출력하는 프로그램을 작성하시오.
입력 예] 입력 예]
a와 b입력 : 4 5 a와 b입력 : 1 5
x와 y입력 : 2 3 x와 y입력 : 2 3
출력 예] 출력 예]
1 0
문제6] 한 개의 정수를 입력받아서 후치 증가 연산자를 사용하여 출력하고 자기 자신을 출력하는 프로그램을 작성하시오.
입력 예]
5
출력 예]
5 6
문제7] 절수와 영희의 키를 입력받아 키가 큰 사람의 키를 출력하는 프로그램을 작성하시오.(삼항 조건 연산자)
입력 예]
철수 키와 영희 키 : 123 130
출력 예]
130
문제8] 두 개의 정수를 입력받아 전치 증가 연산자와 후치 감소 연산자를 사용하여 두 수의 합을 출력하고 각각 정수 값을 출력하는 프로그램을 작성하시오.
입력 예]
5 8
출력 예]
14 6 7
'프로그램언어 > C언어' 카테고리의 다른 글
c언어 반복문(for, while, do ~ while) (0) | 2019.10.02 |
---|---|
c언어 선택문 (if, switch) (0) | 2019.10.01 |
c언어 Scanf()함수 (0) | 2019.09.30 |
c언어 오버플로우(overflow)와 언더플로우(underflow), 상수, 형변환 (0) | 2019.09.27 |
c언어 변수 선언과 자료형의 종류 (0) | 2019.09.27 |