알고리즘 2

최대공약수 - 유클리드 호제법

최대공약수를 구해야 하는 경우가 있다. int Calc(int a, int b) { int num, flag = 1; if(a >= b) num=b; else num=a; while(flag == 1){ if(a%num == 0 && b%num == 0){ flag = 0; break; } num--; } return num; } 위의 함수는 최대공약수를 구하는 함수다. num의 경우 두 숫자 a와 b중 작은숫자로 부터 시작하여 디카운트를 진행하여 주어진 두 숫자를 모두 나누었을때 나머지가 0인 경우. 즉, num이 가장큰 공통 약수가 되는 경우를 찾는 매우 간단한 코드다. 하지만 위의 코드의 경우 카운트를 하나씩 줄여가면서 일일이 a와 b에 연산을 진행해야하므로 결과값을 얻는데 시간이 오래 걸린다. 유..

알고리즘 2023.05.24

비트 연산

비트 연산 임베디드 시스템 프로그래밍을 하거나 펌웨어 프로그래밍을 하게 되면 하드웨어의 데이터 시트를 보고 레지스터에 직접접근하는 경우가 많다. 그런 경우에는 레지스터의 비트단위로 접근하여 값을 Read/Write해야 하는 경우가 많다. 비트연산의 간단한 테스트를 위해 unsigned int 타입의 변수 TEMP를 정 그 TEMP에 접근하기 위한 포인터 변수 temp_ptr를 만든다. 변수의 타입의 경우 uint8_t, uint32_t, sint16_t와 같은 stdint.h에 들어있는 자료형을 많이 사용하나 이해를 돕기위해 원형을 쓰도록 한다. unsigned int TEMP = 0x00000000; unsigned int *temp_ptr; temp_ptr = &TEMP; TEMP에 접근하기 위해서는..

알고리즘 2023.04.11