6. 연산자 (Operator)
(1) 연산자 종류
- 증감 연산자 (++/--) : 피연산자 1씩 증가/감소
- 산술 연산자 (+,-,*,/,%) : 산술식 구성
- 시프트 연산자 (<<, >>) : 비트 이동
- 관계 연산자 (>,<, >=, <=, ==, !=) : 두 피연산자 사이 크기 비교
- 비트 연산자 (&, |, ^, ~) : 비트 단위 논리 연산
- 논리 연산자 (&&, ||, ! ) : 두 피연산자 사이 논리적 관계 정의
- 삼항 연산자 (조건식 ? : 참값 : 거짓값) : 조건이 참일 때, ? 뒤 첫 번째 값, 거짓일 때, ? 뒤 두 번째 값 반환
- 대입 연산자 ( =, +=, -=, *=, /=, %= ) : 변수에 값 대입 시 사용, 오른쪽 값 이용 왼쪽 변수에 값 대입
* 연산자 우선 순위 암기법 *
증산시 관비 논삼대 (증산 시장에서 관노비들이 논 산대)
증감 / 산술 / 시프트 / 관계 / 비트 / 논리 / 삼항 / 대입
(2) 연산자 우선순위
1. x++ , x--
- 단항 연산자, 증감 연산자
2. ++x, --x
- 단항 연산자, 증감 연산자
2. !
- 단항 연산자, 논리 연산자
2. ~
- 단항 연산자, 비트 연산자
일반적으로 연산자 우선 순위는 '증산시관비논산대' 지만
논리 연산자 중 단항 연산자인 ! 와 비트 연산자 중 단항 연산자인 ~ 는 증감 연산자와 산술 연산자 사이에 존재
또한 관계 연산자에서 같은지 다른지를 비교하는 == 와 != 는
대소 비교하는 >,<,>=,<= 연산자보다 우선 순위가 낮음
3. *, / , %
- 이항 연산자, 산술 연산자
4. +, -
- 이항 연산자, 산술 연산자
5. >>, <<
- 이항 연산자, 시프트 연산자
6. >, <, >=, <=
- 이항 연산자, 관계 연산자
7. ==, !=
- 이항 연산자, 관계 연산자
8. & (AND)
- 이항 연산자, 비트 연산자
9. ^ (XOR)
- 이항 연산자, 비트 연산자
10. | (OR)
- 이항 연산자, 비트 연산자
11. && (AND)
- 이항 연산자, 논리 연산자
12. || (OR)
- 이항 연산자, 논리 연산자
13. 조건식 ? A : B
- 삼항 연산자
14. =, +=, -=, *=, /=, %=
- 대입 연산자
(3) 연산자 상세
[1] 증감 연산자
++x : 변수 1 증가 후, x 사용
--x : 변수 1 감소 후, x 사용
x++: x 사용 후, 1 증가
x--: x 사용 후, 1 감소
#include <stdio.h>
int main(){
int x=3, y=3;
printf('%d',x++);
printf('%d',x);
printf('%d',++y);
printf('%d',y);
return 0;
}
# 3444
- main 부터 시작
- x 3, y 3 선언
- 3 출력 후, 1 증가 (x=4)
- 4 출력 (x)
- y 1 증가(y=4) 후, 4 출력
- 4 출력(y)
#include <stdio.h>
int main(){
int x=3, y=3;
int z= x++ + ++y;
printf('%d %d %d', x, y, z);
return 0;
}
# 4 4 7
- main 부터 시작
- x 3, y 3 선언
- x(=3) + y 1증가 값(=4) = z = 7, z 계산 후, x 1 증가 (=4)
- 4 4 7 출력
#증감 연산자 단독 사용
#include <stdio.h>
int main(){
int x=3, y=3;
x++;
++y;
printf('%d %d', x, y);
return 0;
}
# 4 4
- x 3, y 3 선언
- 증감 연산자 혼자 있으므로 x 1 증가 =4
- 증감 연산자 혼자 있으므로 y 1 증가 =4
- 4 4 출력
[2] 산술 연산자
+ : 양쪽 값 더하기
- : 왼쪽에서 오른쪽 빼기
* : 양쪽 값 곱하기
/ : 왼쪽에서 오른쪽 나누기
% : 왼쪽에서 오른쪽 나누고 남은 나머지 계산 (**정수끼리만 계산 가능**)
C언어에서 연산은
1. 정수 & 정수 = 정수 (**나누기 연산 시 소수점 버려짐**)
2. 정수 & 실수 = 실수
3. 실수 & 실수 = 실수
#incldue <stdio.h>
int main(){
int x=3, y=2;
float z=2.0;
printf('%d %d\n', x%y, y%x);
printf('%d %.2f', x/y, x/z);
return 0;
}
# 1 2
# 1 1.50
- 정수형 변수 x 3, y 2 선언
- 실수형 변수 z 2.0 선언
- 정수와 정수의 연산이므로 결과값도 정수, 3 나누기 2 한 나머지는 1, 2 나누기 3 한 나머지는 2
- x/y는 정수와 정수 연산이므로 소수값 버림, 1.5=1
- x/z는 정수와 실수 연산이므로 3/2.0 = 1.5인데 소수점 이하 2자리 출력이므로 1.50 출력
[3] 시프트 연산자
<< : 왼쪽 값을 오른쪽 값만큼 왼쪽으로 비트 이동
>> : 왼쪽 값을 오른쪽 값만큼 오른쪽으로 비트 이동
<< 는 왼쪽으로 비트 이동하므로 1비트마다 2배 증가
>> 는 오른쪽으로 비트 이동하므로 1비트마다 2배 감소
#include <stdio.h>
int main(){
int x=11;
printf('%d', x<<3);
printf('%d', x>>1);
return 0;
}
# 885
- x 11 선언
- 11은 2진수로 1011
- 왼쪽으로 3비트 이동하면 1011000 = 2^0(=1)*0 + 2^1*0 + 2^2*0 + 2^3*1 + 2^4*1 + 2^5*0 + 2^6*1 = 0+0+0+8+16+0+64 = 88
- 대입 안 했으므로 x 값은 1011 그대로
- 1011 오른쪽 1비트 이동 시, 101 (맨 뒤 한 자리 사라짐) = 2^0(=1)*1 + 2^1*0 +2^2*1 = 1+0+4 = 5
- 885 출력
[4] 관계 연산자
- 참은 1, 거짓은 0 반환
> : 왼쪽 값이 오른쪽보다 크면 1 (참), 작으면 0 (거짓)
< : 왼쪽 값이 오른쪽보다 작으면 1 (참), 크면 0 (거짓)
>= : 왼쪽 값이 오른쪽보다 크거나 같으면 1, 작으면 0
<= : 왼쪽 값이 오른쪽보다 작거나 같으면 1, 크면 0
== : 양쪽 값이 같으면 1, 다르면 0
!= : 양쪽 값이 다르면 1, 같으면 0
#include <stdio.h>
int main(){
printf('%d\n', 3=3);
printf('%d\n', 3!=3);
return 0;
}
# 1
# 0
- 3과 3은 같으므로 참인 1 출력
- 3과 3은 같으므로 거짓인 0 출력
C언어는 논리형 변수는 없음
BUT, 논리식 계산 때 0 이면 거짓
0 아닌 값은 참으로 인식
출력 시에는 참이면 1, 거짓이면 0 출력
[5] 비트 연산자
& (AND 연산자) : 두 값 비트로 연산, 같은 자리 값으로 비교 했을 때 모두 1이면 1, 아니면 0 출력
| (OR 연산자) : 비트 연산 시 같은 자리 값 중 하나라도 1이면 1, 둘 다 0 이면 0 출력
^ (XOR 연산자) : 비트 연산 시 같은 자리 값이 서로 다르면 1, 같으면 0 출력
~ (NOT 연산자) : 단항 연산자로, 모든 비트의 값 반대로 반전
- AND, OR, XOR 연산자
1. AND
피연산자 모두 참이면 참, 아니면 거짓
2. OR
피연산자 모두 거짓이면 거짓, 아니면 참 (하나라도 참이면 참)
3. XOR
피연산자 서로 다르면 참, 같으면 거짓
#include <stdio.h>
int main(){
printf('%d', 12&10);
printf('%d', 12|10);
printf('%d', 12^10);
printf('%d', ~12);
return 0;
}
# 8146-13
- 12는 2진수로 1100, 10은 2진수로 1010
- AND 연산 : 1&1 = 1, 1&0=0, 0&1=0, 0&0=0 > 1000 = 2^3*1 = 8
- OR 연산 : 1|1 =1, 1|0=1, 0|1=1, 0|0=0 > 1110 = 2^3*1 + 2^2*1 + 2^1*1 = 14
- XOR 연산 : 1^1=0, 1^0=1, 0^1=1, 0^0=0 > 0110 = 2^2*1 + 2^1*1 = 6
- NOR 연산 : 부호 반대로 바꾼 값에 1을 뺀 값 = -12-1 = -13
- 8146-13 출력
- NOT 연산
부호 반대로 바꾼 값에 1 뺀 값으로 기억
[6] 논리 연산자
- 참이면 1, 거짓은 0 반환
&& (AND) : 두 개 논릿값 모두 참이면 참(1) , 아니면 거짓(0)
|| (OR) : 두 개 논릿값 모두 거짓이면 거짓(0), 아니면 참(1)
! (NOT) : 단항 연산자로, 해당 값이 참이면 0, 거짓이면 1 반환
#include <stdio.h>
int main(){
int x=5, y=3;
printf('%d', x>5 && y>=3);
printf('%d', x>5 || y>=3);
return 0;
}
# 01
- 0 && 1 = AND 연산이므로 0 출력
- 0 || 1 = OR 연산이므로 1 출력
[7] 삼항 연산자
- 조건식 ? A (참) : B (거짓)
#include <stdio.h>
int main(){
int a=26, b=91;
int x= a<b ? a:b;
printf('%d',x);
return 0;
}
# 26
- 26은 91보다 작으므로 참이기 때문에 물음표 연산자 뒤 첫 번째 값인 x=a=26
[7] 대입 연산자
= : 왼쪽 변수에 오른쪽 값 대입
+= : 왼쪽 변수에 오른쪽 값 더하고 대입
-= : 왼쪽 변수에 오른쪽 값 빼고 대입
*= : 왼쪽 변수에 오른쪽 값 곱하고 대입
/= : 왼쪽 변수에 오른쪽 값 나누고 대입
%= : 왼쪽 변수에 오른쪽 값 나누고 남은 나머지를 대입
#include <stdio.h>
int main(){
int a=17;
a+=1;
a-=2;
a*=3;
a/=4;
a%=5;
printf('%d', a);
return 0;
}
# 2
- a = 17+1= 18
- a = 18-2 =16
- a = 16 *3 = 48
- a= 48 / 4 = 12
- a = 12 % 5 = 2
- 2 출력
'WorkOut > 정보처리기사' 카테고리의 다른 글
C언어 | 구조체와 함수 (0) | 2024.03.19 |
---|---|
C언어 | 배열과 문자열 (0) | 2024.03.18 |
C언어 | 조건문과 반복문 (0) | 2024.03.18 |
C언어 | 전처리기, 자료형, 식별자, 변수, 표준 입출력함수 (3) | 2024.03.16 |
프로그래밍을 위한 기본 사항 | 진수 (0) | 2024.03.16 |