Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 스프링 mvc2 - 검증
- 2024 정보처리기사 수제비 실기
- 자바의 정석 기초편 ch6
- jpa 활용2 - api 개발 고급
- 자바의 정석 기초편 ch8
- 스프링 db2 - 데이터 접근 기술
- 자바의 정석 기초편 ch1
- 스프링 mvc2 - 타임리프
- 자바의 정석 기초편 ch12
- 스프링 db1 - 스프링과 문제 해결
- 스프링 입문(무료)
- 스프링 mvc1 - 서블릿
- 자바의 정석 기초편 ch11
- @Aspect
- 자바 중급1편 - 날짜와 시간
- 자바의 정석 기초편 ch2
- 자바의 정석 기초편 ch4
- 게시글 목록 api
- 2024 정보처리기사 시나공 필기
- 코드로 시작하는 자바 첫걸음
- 자바의 정석 기초편 ch7
- 스프링 mvc1 - 스프링 mvc
- 자바 기본편 - 다형성
- 자바의 정석 기초편 ch9
- 자바의 정석 기초편 ch14
- 자바의 정석 기초편 ch5
- 스프링 mvc2 - 로그인 처리
- jpa - 객체지향 쿼리 언어
- 스프링 고급 - 스프링 aop
- 자바의 정석 기초편 ch13
Archives
- Today
- Total
나구리의 개발공부기록
Chapter 02 - C언어(연산자) 본문
2024정보처리기사 준비 정리(필기 - 시나공, 실기 - 수제비)/실기 6강 - 프로그래밍 언어 활용
Chapter 02 - C언어(연산자)
소소한나구리 2024. 5. 20. 22:32728x90
2024년도 수제비 실기책(6판) 내용 정리
6. 연산자
1) 연산자(Operator)개념
- 프로그램 실행을 위해 연산을 표현하는 기호
2) 연산자 종류
종류 | 설명 | 연산자 |
증감 연산자 | 피연산자를 1씩 증가 혹은 1씩 감소시킬 때 사용하는 연산자 | ++, -- |
산술 연산자 | 산술식을 구성하는 연산자 | +, -, *, /, % |
시프트 연산자 | 비트를 이동시키는 연산자 | <<, >> |
관계 연산자 | 두 피연산자 사이의 크기를 비교하는 연산자 | >, <, >=, <=, ==, != |
비트 연산자 | 비트 단위로 논리 연산할 때 사용하는 연산자 | &, ^, |, ~ |
논리 연산자 | 두 피연산자 사이의 논리적인 관계를 정의하는 연산자 | &&, ||, ! |
삼항 연산자 | 조건이 참일 경우 물음표와 콜론 사이의 값을 반환, 조건이 거짓일 경우 콜론과 세미 콜론 사이의 값을 반환하는 연산자 |
(조건식) ? (참) : (거짓); |
대입 연산자 | 변수에 값을 대입할 때 사용하는 연산자 오른쪽에 있는 값을 이용해 왼쪽의 변수에 값을 대입 |
=, +=, -=, *=, /=, %= |
3) 연산자 우선순위
우선순위 | 연산자 | 항의 개수 | 유형 |
1 | x++ | 단항 연산자 | 증감 연산자 |
x-- | |||
2 | ++x | ||
--x | |||
! | 논리 연산자(부정) | ||
~ | 비트 연산자(부정) | ||
3 | * | 이항 연산자 | 산술 연산자 |
/ | |||
% | |||
4 | + | ||
- | |||
5 | << | 시프트 연산자 | |
>> | |||
6 | < | 관계 연산자 | |
> | |||
<= | |||
>= | |||
7 | == | ||
!= | |||
8 | & | 비트 연산자 | |
9 | ^ | ||
10 | | | ||
11 | && | 논리 연산자 | |
12 | || | ||
13 | (조건식) ? a : b; | 삼항 연산자 | 삼항 연산자 |
14 | = | 대입 연산자 | 대입 연산자 |
+= | |||
-= | |||
*= | |||
/= | |||
%= |
4) 연산자 상세
(1) 증감 연산자(Increment & Decrement Operator)
종류 | 설명 |
++x | 변수의 값을 1 증가시킨 후에 해당 변수를 사용하는 연산자 |
x++ | 변수를 사용한 후에 변수의 값을 1 증가시키는 연산자 |
--x | 변수의 값을 1 감소시킨 후에 해당 변수를 사용하는 연산자 |
x-- | 변수를 사용한 후에 변수의 값을 1 감소시키는 연산자 |
#include <stdio.h>
int main() {
int x = 3, y = 3;
printf("%d", x++); // 3 출력 후 x의 값을 1 증가
printf("%d", x); // 4 출력
printf("%d", ++y); // y의 값을 1 증가시킨 후 y의 값을 출력, 4 출력
printf("%d", y); // 4 출력
return 0;
}
#include <stdio.h>
int main() {
int x=3, y=3;
int z = x++ + ++y; // y의 값을 1 증가시킨 후 x(4) + y(3) 연산을 하고 그 값을 z에 대입, z == 7
// 그 후 x의 값을1 증가시킴, x == 4
printf("%d %d %d", x, y, z); // 4, 4, 7 출력
return 0;
}
#include <stdio.h>
int main() {
int x = 3, y = 3;
x++; // 단독 사용시 단순히 1 증가, x는 4가 됨
++y; // 위와 동일
printf("%d %d, x, y); 4, 4 출력
return 0;
}
(2) 산술 연산자(Arithmetic Operator)
- C언어에서 정수와 정수를 나누기(/) 연산하게 되면 정수 / 정수로 계산되어 소수점이 버려지게 됨
- 소수점을 나오게 하고자 하면 정수 / 실수를 연산하거나 실수 / 실수로 연산하면 됨
종류 | 설명 |
+ | 양쪽의 값을 더하는 연산자 |
- | 왼쪽 값에서 오른쪽 값을 빼는 연산자 |
* | 두 개의 값을 곱하는 연산자 |
/ | 왼쪽 값을 오른쪽 값으로 나누는 연산자 |
% | 왼쪽 값을 오른쪽으로 나눈 나머지를 계산하는 연산자, 정수끼리만 계산할 수 있음 |
#include <stdio.h>
int main() {
int x = 3, y = 2;
float z = 2.0;
// x를 y로 나눈 나머지와 y를 x로 나눈 나머지를 정수형식으로 출력,
printf("%d %d\n", x%y, y%x); // 1, 2
// x를 y로 나눈 몫을 정수형식으로, x를 z를 나눈 몫을 소수점둘째자리까지 표현하는 실수 형식으로 출력
printf("%d %.2f", x/y, x/z); // 1, 1.50
return 0;
}
(3) 시프트 연산자(Shift Operator)
- <<로 1비트 이동시킬 때마다 2배씩 증가하게 되고, >>로 1비트 이동시킬 때마다 2배씩 감소(2진법의 자리가 변환하기 때문)
- 비트연산자로 계산할 때는 2진수로 변환 후 계산
종류 | 설명 |
<< | 왼쪽 값을 오른쪽 값 만큼 비트를 왼쪽으로 이동하는 연산자 |
>> | 왼쪽 값에 오른쪽 값만큼의 부호 비트를 채우면서 오른쪽으로 이동하는 연산자 |
#include <stdio.h>
int main() {
int x = 11;
// x의 값을 3만큼 왼쪽으로 비트연산, 계산을 위해서 우선 x를 2진수로 변환
// 11의 2진수는 1011이고 해당 값을 3만큼 왼쪽으로 이동시키면 1011000으로 변경 됨(이동한 자리는 0으로 채움)
// 10진수로 변환하면 88이 됨
printf("%d", x<<3); // 88 출력
// 위와 동일하게 x의 2진수의 값은 1011이고 해당 값을 1반큼 오른쪽으로 비트연산 수행
// x의 값은 101이 되고 10진수로 변환하면 값은 5가 됨
printf("%d", x>>1); // 5 출력
return 0;
}
// 출력 : 885(개행문자가 없어서 붙혀서 출력됨)
(4) 관계 연산자 (relation Operator)
- 참이면 1을 거짓이면 0을 반환
종류 | 설명 |
> | 왼쪽에 있는 값이 오른쪽에 있는 값보다 크면 참을 반환하고, 아니면 거짓을 반환 |
< | 왼쪽에 있는 값이 오른쪽에 있는 값보다 작으면 참을 반환하고, 아니면 거짓을 반환 |
>= | 왼쪽에 있는 값이 오른쪽에 있는 값보다 크거나 같으면 참을 반환하고, 아니면 거짓을 반환 |
<= | 왼쪽에 있는 값이 오른쪽에 있는 값보다 작거나 같으면 참을 반환하고, 아니면 거짓을 반환 |
== | 왼쪽에 있는 값과 오른쪽에 있는 값이 같으면 참을 반환하고, 아니면 거짓을 반환 |
!= | 왼쪽에 있는 값과 오른쪽에 있는 값이 다르면 참을 반환하고, 아니면 거짓을 반환 |
#include <stdio.h>
int main() {
printf("%d\n", 3==3); // 3==3의 결과는 참이므로 참의 값을 10진 정수형태로 출력, 1 출력
printf("%d\n", 3!=3); // 3!=3의 결과는 거짓이므로 거짓의 값을 10진 정수형태로 출력, 0출력
return 0;
}
(5) 비트 연산자(Bit Operator)
종류 | 설명 |
& | 두 값을 비트로 연산하여 같은 비트의 값이 모두 1이면 해당 비트의 값이 1이 되고 아니면 0이 됨 (AND) |
| | 두 값을 비트로 연산하여 같은 비트의 값이 하나라도 1이면 해당 비트의 값이 1이되고 아니면 0이됨 (OR) |
^ | 두 값을 비트로 연산하여 같은 비트의 값이 서로 같으면 0이되고 다르면 1이되는 연산자 (XOR) |
~ | 모든 비트의 값을 반대로 바꾸는 반전 기능을 하는 연산자 (NOT) |
- AND연산 : 피연산자가 모두 True인 경우에만 결과가 True이고 그 외에는 모두 False
- OR연산 : 피연산자가 모두 False인 경우에만 결과가 False이고 그 외에는 모두 True
- XOR연산 : 피연산자가 모두 다르면 True, 서로 같으면 False
피연산자 | 피연산자 | AND | OR | XOR |
True | True | True | True | False |
True | False | False | True | True |
False | True | False | True | True |
False | False | False | False | False |
#include <stdio.h>
int main() {
// 비트 연산을 하기 위해 12와 10을 모두 2진수로 변환하여 각 비트의 자리를 연산자에 맞게 비교
// 12의 2진수는 1100
// 10의 2진수는 1010
// &연산은 비교할 비트의 자리가 둘다 1이여야 1이 되므로 1000이됨
printf("%d", 12 & 10); // 1000을 10진 정수로 출력, 8
// |연산은 비교할 비트의 자리가 하나라도 1이면 1이되므로 1110이됨
printf("%d", 12 | 10); // 1110을 10진 정수로 출력, 14
// ^연산은 비교할 비트의 자리가 같으면 0이고 다르면 1이 되므로 110이됨
printf("%d", 12 ^ 10); // 110을 10진 정수로 출력, 6
// ~연산은 부호를 반대로 바꾼 값에 1을 뺀 값이 출력됨
printf("%d", ~12); // -13이 출력
return 0;
}
// 출력 : 모두 개행이 없으므로 8146-13 이 출력됨
- ~ (NOT) 연산은 2진수로 변환했을 때 각 자릿수에 대해 0이면 1로, 1이면 0으로 변환시키면 되는데 Sign Bit와 같은 컴퓨터 구조에 관한 내용을 알고 있으야 하므로 부호를 반대로 바꾼 값에 1을 뺀 값이라고 기억해두면 됨
(6) 논리 연산자(Logic Operator)
- 참이면 1을 거짓이면 0을 반환
종류 | 설명 |
&& | 두 개의 논리값이 모두 참이면 참을 반환하고 아니면 거짓을 반환 (AND) |
|| | 두 개의 논릿값 중 하나라도 참이면 참을 반환하고 아니면 거짓을 반환 (OR) |
! | 한 개의 논릿값이 참이면 거짓을 반환하고 거짓이면 참을 반환하는 연산 (NOT) |
#include <stdio.h>
int main() {
int x = 5, y = 3;
// x > 5은 false(0), y >= 3은 true(1), 두 개의 논리값을 &&연산
printf("%d", x>5 && y>=3); // 모두 참이 아니므로 false, 10진 정수 형태로 출력, 0
// 위와 동일한 논리값을 || 연산
printf("%D", x>5 || y>=3); // 둘중 하나가 참이므로 true, 10진 정수 형태로 출력, 1
return 0;
}
// 출력 : 01
(7) 삼항 연산자(Ternary Operator)
- 조건식 ? 참일때값 : 거짓일때값;
#include <stdio.h>
int main() {
int a = 26, b = 91;
// a < b의 조건이 참이면 a의 값을, 거짓이면 b의 값을 x에 대입
int x = a < b ? a : b; //조건식이 참이므로 x에 26이 대입
printf("%d", x); //26 출력
return 0;
}
(8) 대입 연산자(Assignment Operator)
종류 | 설명 |
= | 왼쪽의 변수에 오른쪽의 값을 대입 |
+= | 왼쪽의 변수에 오른쪽의 값을 더한 후, 그 결과값을 왼쪽의 변수에 대입 |
-= | 왼쪽의 변수에 오른쪽의 값을 뺀 후, 그 결과값을 왼쪽의 변수에 대입 |
*= | 왼쪽의 변수에 오른쪽의 값을 곱한 후, 그 결과값을 왼쪽의 변수에 대입 |
/= | 왼쪽의 변수에 오른쪽의 값을 나눈 후, 그 몫을 왼쪽의 변수에 대입 |
%= | 왼쪽의 변수에 오른쪽의 값을 나눈 후, 그 나머지를 왼쪽의 변수에 대입 |
#include <stdio.h>
int main(){
int a = 17;
a += 1; // a에 1을 더한후 연산결과를 다시 a에 저장, 18
a -= 2; // a에 2를 뺀 후 연산결과를 다시 a에 저장, 16
a *= 3; // a에 3을 곱한 후 연산 결과를 다시 a에 저장, 48
a /= 4; // a에 4를 나눈 후 몫을 다시 a에 저장, 12
a %= 5; // a에 5를 나눈 후 나머지를 다시 a에 저장, 2
printf("%d", a); // 2가 출력됨
return 0;
}
728x90
'2024정보처리기사 준비 정리(필기 - 시나공, 실기 - 수제비) > 실기 6강 - 프로그래밍 언어 활용' 카테고리의 다른 글
Chapter 02 - C언어(함수) (0) | 2024.05.24 |
---|---|
Chapter 02 - C언어(배열, 문자열, 구조체) (0) | 2024.05.21 |
Chapter 02 - C언어(조건문, 반복문) (0) | 2024.05.21 |
Chapter 02 - C언어(변수, 표준 입출력 함수) (0) | 2024.05.19 |
Chapter 01 - 프로그래밍을 위한 기본 사항(진수) , Chapter 02 - C언어(C언어 기본, 자료형, 식별자) (0) | 2024.05.18 |