일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- AppInventer
- Gain
- 아이리스
- image sensor
- 과초점거리
- 저장소와 동적메모리
- 프로그래머스 lv2
- Depth of Fileld
- 변수의 초기화와 대입
- 조건 제어문
- Pixel Bit Format
- 실생활알고리즘
- main 함수 인자 전달
- 심도
- CS Mount
- 변수
- 저조도
- 고정비트레이트
- C Mount
- camera
- 이미지센서
- Zoom Lense
- 카메라
- Patch Cleaner
- 렌즈
- ASCCII
- 무게선별자동화
- 간단한 앱만들어보기
- Digital Slow Shutter
- c언어
- Today
- Total
카메라 개발자 공부방(SW)
[3장] 연산자 본문
오늘은 연산자에 대해서 이야기해보겠습니다.
다음은 C언어에서 사용되는 모든 연산입니다.
연산자 종류
산술 연산자 +, -, *, /, %
증감 연산자 ++, --
대입 연산자 =, -=, +=, *=, /=
비교 연산자 <, >, <=, >=, ==, !=
논리 연산자 &&, ||, !
비트 연산자 &, |, ~, ^
쉬프트 연산자 <<, >>
간접, 주소 연산자 *, &, []
형 변환, 괄호 연산자 ( )
멤버 접근 . ->
조건(삼항 연산자) 조건? your code1 : your code2
산술 연산자
기본적인 사칙연산을 할 수 있습니다.
#include<stdio.h>
int main()
{
int val0 = 10;
int val1 = 20;
printf("%d\n", val0 + val1);
printf("%d\n", val0 - val1);
printf("%d\n", val0 * val1);
printf("%d\n", val0 / val1);
return 0;
}
// 실행결과
// 30
// -10
// 200
// 0 -> int 타입으로 명시된 메모리는 무조건 소수점을 버립니다. 0.2 -> 0
+, -, *, / 는 설명이 따로 필요 없겠죠?
#include <stdio.h>
int main()
{
int val0 = 10;
int val1 = 20;
printf("%d\n", val0 % val1);
return 0;
}
// 실행결과
// 10
% 연산자는 나눈 나머지 값을 의미합니다. 10을 20으로 나눈 나머지는 10입니다.
#include <stdio.h> // 1 line
// 2
int main() // 3
{ // 4
int n = 1; // 5
printf("%d\n", n++); // 6
return 0; // 7
}
// 실행결과
// 1
후위 연산자는 선행된 연산이 끝난 후, 나중에 값을 증가시킵니다. 여기선 5 line이 완전히 끝난 후에 증가됩니다.
#include <stdio.h> // 1 line
// 2
int main() // 3
{ // 4
int n = 1; // 5
printf("%d\n", ++n); // 6
return 0; // 7
} // 8
// 실행결과
// 2
선위 연산자는 값을 먼저 증가시킨 후 연산합니다. 여기선 5 line 도입하자마자 1을 증가시킨 후 printf의 인자로 전달됩니다.
#include <stdio.h>
int main()
{
int n = 1;
n = n + 10;
printf("%d\n", n);
return 0;
}
// 실행결과
// 11
이 예제는 10을 더하는 예제입니다.
#include <stdio.h>
int main()
{
int n = 1;
n += 10; // n = n + 10
printf("%d\n", n);
return 0;
}
// 실행결과
// 11
방금 했던 10을 더한 연산과 n += 10 연산은 동일합니다. 이런 방법으로도 합을 표현할 수 있습니다.
논리 연산자
&&, ||, ==, !-
논리식에서 세부 논리 조건을 결정해야 될 때 논리 연산자가 사용됩니다.
&& 그리고
|| 혹은
== 같다면
!= 같지 않다면
A && B // A도 참이고 B도 참인 경우에 참
A || B // A와 B 중에 하나만 참이어도 참
A == B // A와 B가 같을 때만 참
A != B // A와 B가 같지 않을 때만 참
#include <stdio.h>
int main()
{
int a = 30;
if (1 <= a && a <= 50) {
printf("1 <= a && a <= 50\n");
}
return 0;
}
// 실행결과
// 1 <= a && a <= 50
a는 1 이상 그리고 50 이하의 값이기 때문에 두 조건 모두 충족합니다. (if는 조건 제어자입니다. 인자의 결과가 참일 때만 { }가 수행됩니다.)
#include <stdio.h>
int main()
{
int a = 30;
if (1 <= a || a <= -20) {
printf("1 <= a || a <= 50\n");
}
return 0;
}
// 실행결과
// 1 <= a || a <= 50
a <= -20 조건이 충족되지 않더라도 1 <= a는 조건을 만족합니다.
#include <stdio.h>
int main()
{
if (50 == 50) {
printf("50 == 50\n");
}
return 0;
}
// 실행결과
// 50 == 50
50과 50은 같기 때문에 참입니다.
#include <stdio.h>
int main()
{
if (50 != 50) {
printf("50 != 50\n");
}
else {
printf("50 == 50\n");
}
return 0;
}
// 실행결과
// 50 == 50
50 != 50은 같기 때문에 거짓입니다.
쉬프트 연산자
비트 단위에서 오른쪽 혹은 왼쪽으로 비트 전부를 이동시킵니다.
#include <stdio.h>
int main()
{
int a = 4;
printf("%d\n", (a << 1));
return 0;
}
// 실행결과
// 8
a | 000000100 |
a << 1 | 000001000 |
비트가 왼쪽으로 한 칸 이동했습니다.
#include <stdio.h>
int main()
{
int a = 4;
printf("%d\n", (a << 2));
return 0;
}
// 실행결과
// 16
a | 000000100 |
a << 2 | 000010000 |
비트가 왼쪽으로 두 칸 이동했습니다.
#include <stdio.h>
int main()
{
int a = 8;
printf("%d\n", (a >> 2));
return 0;
}
// 실행결과
// 2
a | 000001000 |
a >> 2 | 000000010 |
비트가 오른쪽으로 두 칸 이동했습니다.
#include <stdio.h>
int main()
{
int a = 8;
printf("%d\n", (a >> 2));
return 0;
}
// 실행결과
// 2
a | 000001000 |
a >> 2 | 000000010 |
비트가 오른쪽으로 두 칸 이동했습니다.
비트 연산자
비트 단위에서 AND, OR, XOR, NOT 연산을 합니다.
#include <stdio.h>
int main()
{
int a = 8;
int b = 4;
printf("%d\n", a & b);
return 0;
}
// 실행결과
// 0
a | 000001000 | |
b | 000000100 | |
a & b | 000000000 |
정수를 비트로 환산한 후, 비트 당 & 연산을 수행합니다(and 연산).
#include <stdio.h>
int main()
{
int a = 7;
int b = 4;
printf("%d\n", a & b);
return 0;
}
// 실행결과
// 4
a | 000000111 |
b | 000000100 |
a & b | 000000100 |
또 다른 예제
#include <stdio.h>
int main()
{
int a = 8;
int b = 4;
printf("%d\n", a | b);
return 0;
}
// 실행결과
// 6
a | 000001000 |
b | 000000100 |
a | b | 000001100 |
이번엔 정수를 비트로 환산한 후, 비트 당 | 연산을 수행합니다. (or 연산)
#include <stdio.h>
int main()
{
int a = 7;
int b = 4;
printf("%d\n", a | b);
return 0;
}
// 실행결과
// 7
a | 000000111 |
b | 000000100 |
a | b | 000000111 |
또 다른 예제~
#include <stdio.h>
int main()
{
int a = 7;
int b = 4;
printf("%d\n", a ^ b);
return 0;
}
// 실행결과
// 3
a | 000000111 |
b | 000000100 |
a ^ b | 000000011 |
이번엔 정수를 비트로 환산한 후, ^ 연산을 수행합니다. (exclusive or)
비트가 서로 다를 때 1이라 생각하세요
#include <stdio.h>
int main()
{
int a = 4;
printf("%d\n", ~a);
return 0;
}
// 실행결과
// -5
a | 000000100 |
~a | 111111011 |
~연산은 정수의 비트를 반전시키는 연산입니다. 맨 앞의 비트는 부호를 담당하기 때문에 음수가 되었습니다. (0이면 양수, 1이면 음수)
여기서 다루지 않은 연산은 다른 챕터에서 공부할 때 다뤄보겠습니다.
(주소=포인터)
(멤버 접근=구조체)
(삼항 연산자=조건문)
'Langauge > C' 카테고리의 다른 글
[6장] 자료형(data type) (0) | 2021.09.25 |
---|---|
[5장] 반복문 (0) | 2021.09.24 |
[4장] 조건 제어문 (0) | 2021.09.23 |
[2장] 변수 (0) | 2021.09.21 |
[1장] C언어 start (0) | 2021.09.20 |