본문 바로가기
Coding/C

C언어 - 논리 연산, 진법

by ZaRi 2023. 5. 6.

 

 오늘은 산술연산자, 증감연산자에 이어 논리 연산과 진법에 대해 알아보겠다.


 

논리 연산

논리 연산은 파이썬에서 보던 것과 비교하면 편합니다.

 

 

논리 연산 파이썬(참고) 설명
&& 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-이-출력됨
출력-결과

 

 그러면 정말 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(거짓)이 출려되는 것을 확인 할 수 있습니다.

 

 

 

 

진법

컴퓨터에서 진법은 여러가지가 있습니다.

진법 설명
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

 

 


 기본적인 진법과 논리 연산에 대해 알아보았습니다. 이제 진법을 배웠으니 다음에 비트 연산자에 대해 배워보겠습니다.

댓글