오늘은 산술연산자, 증감연산자에 이어 논리 연산과 진법에 대해 알아보겠다.
논리 연산
논리 연산은 파이썬에서 보던 것과 비교하면 편합니다.
논리 연산 | 파이썬(참고) | 설명 |
&& | and | 둘 다 참이면 1을 반환, 하나라도 거짓이면 0을 반환 |
|| | or | 둘 중 하나라도 참이면 1을 반환 |
! | not | 논리식의 결과에 반대 값을 반환 |
보게 되면 파이썬은 논리연산을 영어로 써놨기에 좀 더 직관적으로 어떤 역할을 하는지 참고하는데 편할 것입니다.
아 그리고, C언에서는 참과 거짓을 0과 1(or 그 나머지 수)로 표현합니다.
참(true) | 거짓(false) |
1 (or 0을 제외한 수) | 0 |
파이썬이나 자바와는 다르게 참과 거짓을 나타내는 자료형(boolean)이 따로 없습니다.
그러면 이제 이것을 활용해보겠습니다.
#include <stdio.h>
int main()
{
double close = 1251.05; // 현재 종가
double sma20 = 1159.47, sma120 = 1156.29; // 20 이평선, 120 이평선
double rsi = 73.5; // rsi
int longpos1;
return 0;
}
저는 평소에 투자에 관심이 있기에, 간단하게 현재 종가, 이평선, rsi 가 저 수치로 있다고 생각해보겠습니다.
그리고 그 투자에 들어가는 조건이 종가가 20이평선보다 높고, 20이평선은 120이평선보다 높을 때 라고 가정해보겠습니다.
#include <stdio.h>
int main()
{
double close = 1251.05; // 현재 종가
double sma20 = 1159.47, sma120 = 1156.29; // 20 이평선, 120 이평선
double rsi = 73.5; // rsi
int longpos1;
longpos1 = close > sma20 && sma20 > sma120;
printf("결과: %d\n", longpos1);
return 0;
}
그러면 위와 같은 식이 만들 수 있습니다.
'&&' 연산자로 묶었으니 양쪽이 참이면 1이 반환 될 것입니다.
그러면 정말 1이 출려된 것을 확인 할 수 있습니다.
조건을 하나 더 추가해보겠습니다. rsi가 50아래 일 때 매수 포지션을 들어간다고 가정하겠습니다.
#include <stdio.h>
int main()
{
double close = 1251.05; // 현재 종가
double sma20 = 1159.47, sma120 = 1156.29; // 20 이평선, 120 이평선
double rsi = 73.5; // rsi
int longpos1 , longpos2;
longpos1 = close > sma20 && sma20 > sma120;
longpos2 = rsi < 50.0;
printf("결과: %d\n", longpos1 && longpos2);
return 0;
}
그럼 이와 같이 만들 수 있습니다.
근데 이번에는 rsi 가 50보다 큽니다. 그럼 어떻게 될까요??
0(거짓)이 출려되는 것을 확인 할 수 있습니다.
진법
컴퓨터에서 진법은 여러가지가 있습니다.
진법 | 설명 |
2 | 0 1 |
8 | 0 1 2 3 4 5 6 7 8 |
16 | 0 1 2 3 4 5 6 7 8 9 a b c d e f |
10 | 0 1 2 3 4 5 6 7 8 9 |
0부터 진법-1까지 나타낸다고 보면 편합니다.
컴퓨터는 계산을 할때 보통 2진법을 사용하게 됩니다.
1bit: 2진법 1의 자리수가 들어갑니다.
1byte: 1bit가 8개 들어갑니다.
그래서 int(4byte)에는 4byte이자 32bit 크기를 가지고 있습니다.
8바이트를 보게되면.
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
2^7 | 2^6 | 2^5 | 2^4 | 2^3 | 2^2 | 2^1 | 2^0 |
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
으로 볼 수 있습니다.
진법 변환
그럼 몇개 진법을 변환해보겠습니다.
2진법 0100 1011이 있습니다.
64 + 8 + 2 + 1 = 75
10진법을 2진법으로 변환해보겠습니다.
35를 2지번법으로 바꿀려면.
0000 0000 = 35 - 32
0010 0000 = 3 - 2
0010 0010 = 1
0010 0011 = 0
0010 0011 = 35
이와 같이 큰 수부터 빼가면서 하면 편합니다.
이제 2진법을 16진법 8진법을 나타내 보겠습니다.
2진법 나타낼 수 있는 수 | 진법 |
000 | 8진법 |
0000 | 16진법 |
8진법
1101 0101 을 3자리씩 나누어줍니다.
11 010 101 각각 바꾸어줍니다.
3 2 5 8의 자리의 각자리 수가 나옵니다.
1101 0101 = 325
16진법
1101 0101 똑 같이 4자리씩 나누어주변 됩니다.
1101 0101 각각 바꾸어줍니다.
13 5 16진법 형식으로 바꾸어줍니다.
1101 0101 = d5
기본적인 진법과 논리 연산에 대해 알아보았습니다. 이제 진법을 배웠으니 다음에 비트 연산자에 대해 배워보겠습니다.
댓글