728x90
본 포스팅은 학교에서 수업을 듣고 정리한 내용입니다.
수식
- 상수, 변수, 연산자의 조합
- 연산자와 피연산자로 나누어진다.
연산자의 분류 | 연산자 | 의미 |
대입 | = | 오른쪽을 왼쪽에 대입 |
산술 | + - * / % | 사칙연산과 나머지 연산 |
부호 | + - | |
증감 | ++ -- | 증가, 감소 연산 |
관계 | > < == != >= <= | 오른쪽과 왼쪽을 비교 |
논리 | && || ! | 논리적인 AND, OR, NOT |
조건 | ? | 조건에 따라 선택 |
콤마 | , | 피연산자들을 순차적으로 실행 |
비트 단위 연산자 | & | ^ ~ << >> | 비트별 AND, OR, XOR, 반전, 이동 |
sizeof 연산자 | sizeof | 자료형이나 변수의 크기를 바이트 단위로 반환 |
형변환 | (type) | 변수나 상수의 자료형을 변환 |
포인터 연산자 | * & [] | 주소계산, 포인터가 가리키는 곳의 내용 추출 |
구조체 연산자 | . -> | 구조체의 멤버 참조 |
- 단항 연산자 -> 피연산자의 수가 1개
- 이항 연산자 -> 피연산자의 수가 2개
- 삼항 연산자 -> 피연산자의 수가 3개
산술 연산
컴퓨터의 가장 기본적인 연산
덧셈, 뺄셈, 곱셈, 나눗셈 등의 사칙 연산을 수행하는 연산자
연산자 | 기초 | 예시 | 결과값 |
덧셈 | + | 7 + 4 | 11 |
뺄셈 | - | 7 - 4 | 3 |
곱셈 | * | 7 * 4 | 28 |
나눗셈 | / | 7 / 4 | 1 |
나머지 | % | 7 % 4 | 3 |
정수 사칙 연산 에시 코드
#include <stdio.h>
int main(void)
{
int x, y, result;
printf("두개의 정수를 입력하시오: ");
scanf("%d %d", &x, &y);
result = x + y;
printf("%d + %d = %d", x, y, result);
result = x - y; // 뺄셈
printf("%d - %d = %d", x, y, result);
result = x * y; // 곱셈
printf("%d + %d = %d", x, y, result);
result = x / y; // 나눗셈
printf("%d / %d = %d", x, y, result);
result = x % y; // 나머지
printf("%d %% %d = %d", x, y, result);
return 0;
}
나눗셈 연산자
정수형끼리의 나눗셈에서는 결과가 정수형으로 생성하고 부동소수점형끼리는 부동소수점 값이 생성된다.
정수형끼리의 나눗셈에서는 소수점 이하는 버려진다.
실수형 사칙 연산 예시 코드
#include <stdio.h>
int main()
{
double x, y, result;
printf("두개의 실수를 입력하시오: ");
scanf("%lf %lf", &x, &y);
result = x + y; // 덧셈 연산을 하여서 결과를 result에 대입
printf("%f / %f = %f", x, y, result);
...
result = x / y;
printf("%f / %f = %f", x, y, result);
return 0;
}
나머지 연산
나머지 연산자(modulus operator)는 첫 번째 피연산자를 두 번째 피연산자로 나누었을 경우의 나머지를 게산
- 10 % 2는 0이다.
- 5 % 7는 5이다.
- 30 % 9는 3이다.
나머지 연산자를 이용한 짝수와 홀수를 구분
- x % 2가 0이면 짝수
나머지 연산자를 이용한 5의 배수 판단
- x % 5가 0이면 5의 배수
나머지 연산 실습 코드
// 나머지 연산자 프로그램
#include <stdio.h>
#define SEC_PER_MINUTE 60 // 1분은 60초
int main(void)
{
int input, minute, second;
printf("초를 입력하시요: ");
scanf("%d", &input); // 초단위의 시간을 읽는다.
minute = input / SEC_PER_MINUTE; // 몇 분
second = input % SEC_PER_MINUTE; // 몇 초
printf("%d초는 %d분 %d초입니다. \n",
input, minute, second);
return 0;
}
부호 연산
변수나 상수의 부호를 변경한다.
x = -10;
y = -x; // 변수 y의 값은 10이 된다.
증감 연산
증감 연산자 | 의미 |
++x | 수식의 값은 증가된 x값이다. |
x++ | 수식의 값은 증가되지 않은 원래의 x값이다. |
--x | 수식의 값은 감소된 x값이다. |
x-- | 수식의 값은 감소되지 않은 원래의 x값이다. |
증감연산자 실습 코드
#include <stdio.h>
int main(void)
{
int x=10, y=10;
printf("x=%d\n", x);
printf("++x의 값=%d\n", ++x);
printf("x=%d\n\n", x);
printf("y=%d\n", y);
printf("y++의 값=%d\n", y++);
printf("y=%d\n", y);
return 0;
}
// x=10
// ++x의 값=11
// x=11
// y=10
// y++의 값=10
// y=11
대입 연산
대입 연산은 변수에 값을 할당하는 연산을 말합니다. 대입 연산자는 등호(=)입니다.
대인 연산 실습 코드
#include <stdio.h>
int main() {
// 변수 선언
int x, y;
// 대입 연산
x = 5;
y = x + 3;
// 결과 출력
printf("x의 값: %d\n", x);
printf("y의 값: %d\n", y);
return 0;
}
복합 대입 연산자
복합 대입 연산자란 +=처럼 대입연산자 =와 산술연산자를 합쳐 놓은 연산자이다.
소스 코드를 간결하게 만들 수 있다.
복합 대입 연산자 | 의미 |
x += y | x = x + y |
x -= y | x = x - y |
x *= y | x = x * y |
x /= y | x = x / y |
x %= y | x = x % y |
x &= y | x = x & y |
x |= y | x = x | y |
x ^= y | x = x ^ y |
x >>= y | x = x >> y |
x <<= y | x = x << y |
복합 대입 연산 실습 코드
// 복합 대입 연산자 프로그램
#include <stdio.h>
int main(void)
{
int x = 10, y = 10, z = 33;
x += 1;
y *= 2;
z %= 10 + 20;
printf("x = %d y = %d z = %d \n", x, y, z);
return 0;
}
관계 연산
두개의 피연산자를 비교하는 연산자
결과값은 참(1) 아니면 거짓(0)이다.
연산자 | 의미 |
x == y | x와 y가 같은가? |
x != y | x와 y가 다른가? |
x > y | x가 y보다 큰가? |
x < y | x가 y보다 작은가? |
x >= y | x가 y보다 크거나 같은가? |
x <= y | x가 y보다 작거나 같은가? |
관계 연산 실습 코드
#include <stdio.h>
int main(void)
{
int x, y;
printf("두개의 정수를 입력하시오: ");
scanf("%d%d", &x, &y);
printf("x == y의 결과값: %d", x == y);
printf("x != y의 결과값: %d", x != y);
printf("x > y의 결과값: %d", x > y);
printf("x < y의 결과값: %d", x < y);
printf("x >= y의 결과값: %d", x >= y);
printf("x <= y의 결과값: %d", x <= y);
return 0;
}
주의점
(x = y)
- y의 값을 x에 대입한다. 이 수식의 값은 x의 값이다.
(x == y)
-
x와 y가 같으면 1, 다르면 0이 수식의 값이 된다.
-
(x == y)를 (x = y)로 잘못 쓰지 않도록 주의!
2 < x < 5
- 위와 같은 연산은 존재X
- 올바른 방법 : (2 < x) && (x < 5)
(1e32 + 0.01) > 1e32
- 양쪽 값이 같은 것으로 간주되어서 거짓이다.
논리 연산
여러 개의 조건을 조합하여 참과 거짓을 따지는 연산자
결과값은 참(1) 아니면 거짓(0)
연산자 | 의미 |
x && y | AND 연산, x와 y가 모두 참이면 참, 그렇지 않으면 거짓 |
x || y | OR 연산, x나 y중에서 하나만 참이면 참, 모두 거짓이면 거짓 |
!x | NOT 연산, x가 참이면 거짓, x가 거짓이면 참 |
논리 연산의 결과값은 항상 1 또는 0이다.
참과 거짓의 표현 방법
- 관계 수식이나 논리 수식이 만약 참이면 1이 생성되고 거짓이면 0이 생성된다
- 피연산자의 참, 거짓을 가릴 때에는 0이 아니면 참이고 0이면 거짓으로 판단한다.
- 음수는 거짓으로 판단한다.
NOT 연선자
피연산자의 값이 참이면 연산의 결과값을 거짓으로 만들고, 피연산자의 값이 거짓이면 연산의 결과값을 참으로 만든다.
논리 연산의 실습 코드
#include <stdio.h>
int main(void)
{
int x, y;
printf("두개의 정수를 입력하시오: ");
scanf("%d%d", &x, &y);
printf("%d && %d의 결과값: %d", x, y, x && y);
printf("%d || %d의 결과값: %d", x, y, x || y);
printf("!%d의 결과값: %d", x, !x);
return 0;
}
조건 연산자
absolute_value = (x > 0) ? x: -x; // 절대값 계산
max_value = (x > y) ? x: y; // 최대값 계산
min_value = (x < y) ? x: y; // 최소값 계산
(age > 20) ? printf(“성인\n”): printf(“청소년\n”);
비트 연산자
모든 데이터는 비트로 이루어진다.
비트 AND 연산자
0 AND 0 = 0 |
1 AND 0 = 0 |
0 AND 1 = 0 |
1 AND 1 = 1 |
비트 OR 연산자
0 OR 0 = 0 |
1 OR 0 = 1 |
0 OR 1 = 1 |
1 OR 1 = 1 |
비트 XOR 연산자
0 XOR 0 = 0 |
1 XOR 0 = 1 |
0 XOR 1 = 1 |
1 XOR 1 = 0 |
비트 NOT 연산자
NOT 0 = 1 |
NOT 1 = 0 |
비트 << 연산자
비트를 왼쪽으로 이동, 값은 2배가 된다.
비트 >> 연산자
비트를 오른쪽으로 이동, 값은 1/2배가 된다.
비트 연산자 실습
#include <stdio.h>
int main(void)
{
printf(“AND : %08X\n”, 0x9 & 0xA);
printf(“OR : %08X\n”, 0x9 | 0xA);
printf(“XOR : %08X\n”, 0x9 ^ 0xA);
printf(“NOT : %08X\n”, ~0x9);
printf(“<< : %08X\n”, 0x4 << 1);
printf(“>> : %08X\n”, 0x4 >> 1);
return 0;
}
연산자 우선순위 일반적인 지침
- 콤마 < 대입 < 논리 < 관계 < 산술 < 단항
- 괄호 연산자는 가장 우선순위가 높다.
- 모든 단항 연산자들은 이항 연산자들보다 우선순위가 높다.
- 콤마 연산자를 제외하고는 대입 연산자가 가장 우선순위가 낮다.
- 연산자들의 우선 순위가 생각나지 않으면 괄호를 이용
- ( x <= 10 ) && ( y >= 20 )
- 관계 연산자나 논리 연산자는 산술 연산자보다 우선순위가 낮다.
- x + 2 == y + 3
728x90
'Programming Language > C & C++' 카테고리의 다른 글
[C] C언어 대학교 실습 과제 (0) | 2023.12.28 |
---|---|
[C] C언어 변수와 자료형 그리고 오버플로우 (0) | 2023.10.27 |
[C] C언어 실습 - 1 (0) | 2023.10.26 |
[C] 프로그램 작성 과정 (0) | 2023.10.26 |
[C] C언어 프로그래밍 기초 요소 : 주석, 변수, 상수, 간단한 연산 (0) | 2023.09.09 |