본문 바로가기

Computer Science

16 Preprocessor 16-01. Preprocessor가 해주는 일들 프로그램을 작성할 때, 코드를 가장 먼저 보는 게 전처리기이다. "컴파일러"의 "전에" 처리를 해주기 때문에 전처리기이다. 최근에는 다양한 플랫폼에서 상품화를 하는 경우가 많다. 윈도우, 앱스토어, 리눅스 등에서 돌아가게 해주는 게 필요하다. C, C++ 언어를 사용할 때 전처리기에 어떻게 코드를 컴파일할지 결정할 수 있도록 도와주는(조건적으로 도와주는) 가능을 사용하면 좋을 것이다. 16-02. 전처리를 준비하는 번역 단계(Translation phases) //// 02 int main() { /* Program written in C 1st. Translating : 번역 단계를 먼저 거친다. 2nd. Preprocessing 3rd. Compili.. 더보기
15 Bit 15-01. 비트 단위 논리 연산자(Bitwise Logical Operators) 비트 단위 논리 연산자에 대해 알아보자. 지금까지 사용해온 논리 연산자는 어떤 자료형의 변수나 상수들에 적용되는 논리 연산들이었다. 지금부터 배울 내용은 비트 단위에서 이뤄지는 논리 연산이다. bitwise logical operator가 필요한 이유 왜 이들이 필요한지부터 알아보자. 이전까지 배운대로 하게 되면 다음과 같이 여러 경우를 표현하고 싶을 때 필요한 메모리 낭비가 크다. bitwise logical operator를 사용하면 아래와 같이 효율적으로 표현할 수 있다. bitwise AND를 살펴보자. 여기서 중요한 점은, 이들이 "비트끼리" 연산이 된다는 것이다!! 15-02. 이진수를 십진수로 바꾸기 연습문제.. 더보기
14 구조체 14-01. 구조체가 필요한 이유 구체적인 문법을 공부하기에 앞서서, 구조체가 왜 필요한지 그 이유부터 간단히 살펴보고 시작하자. 우리가 환자의 데이터를 관리하는 업무를 한다고 가정하자. 많은 수의 환자 데이터를 처리하고 싶을 것이다. 이 많은 데이터들을 배열을 통해 처리한다. 배열은 기본적으로 자료형이 같은 데이터 옵젝트들이 나열된 형태이다. 하지만 자료형이 서로 다르지만 함께 사용하면 편리한 데이터 오브젝트들끼리 모아둘 순 없을까? 이때 우리가 사용할 수 있는 문법이 구조체이다. 구조체 내에는 여러 변수들이 구조체의 "멤버"로써 들어가 있다. 이들은 자료형이 다르더라도 묶어서 "하나의 새로운 자료형인 것처럼" 프로그래밍하게 해주는 것이 구조체이다. 14-02. 구조체의 기본적인 사용법 문법적인 측면에.. 더보기
13 File_IO 13-01. 파일 입출력의 작동 원리 텍스트 파일 스트림과 바이너리 파일 스트림의 차이를 살펴보자. 텍스트 파일의 경우 다음과 같이 사람이 읽을 수 있도록 3,4,5,6,7을 저장하게 된다. EOF의 경우 운영체제에 따라 붙을 수도, 붙지 않을 수도 있다. 13-02. 텍스트 파일 입출력 프로그램 예제 //// 13-01 int main(int argc, char* argv[]) { int ch; FILE* fr; //TODO: file pointer to write // 이들은 파일에 대한 포인터라고 생각할 수 있는데, // 엄밀히 말하면 "파일을 처리할 때 필요한 데이터의 묶음"에 대한 "포인터"이다. FILE* fw; /* typedef struct_iobuf { char* _ptr; int _cn.. 더보기
12 Memory 12-01. 메모리 레이아웃 훑어보기 이번 강의에서는 그림을 익히는 정도만 하고, 추후에 하나하나 상세하게 설명할 예정이다. 프로그램이 시작될 때 프로그램 전체에서 계속 사용되는 변수들 어디서나 접근해서 값을 저장하고 가져올 수 있다. 프로그램이 종료될떄까지 메모리에 남아있다. 프로그램의 일부에서 큰 메모리가 필요한 경우 운영체제나 컴파일러는 효율을 매우 중시하도록 만들어졌다. 메모리를 항상 갖고 있는 것은 부담스럽다. 운영체제, 컴파일러 입장에서도 권장하고 싶지 않다. 따라서, 지역적으로 사용될 수 있는 변수를 선언할 수 있고, 이들을 local variable이라고 부른다. 이 지역변수들은 스택이라는 메모리에 저장된다. 이들은 실행이 될때, 블록에 속하는 코드가 실행이 될 때만 메모리에 들어간다. 따.. 더보기
11 String 11-01. 문자열을 정의하는 방법 #define MESSAGE "A symbolic string contant" #define MAXLENGTH 81 int main() { char words[MAXLENGTH] = "A string in an array"; const char* pt1 = "A pointer to a string."; puts("Puts() adds a newline at the end:"); // puts() add \n at the end puts(MESSAGE); puts(words); puts(pt1); words[3] = 'p'; //ok puts(words); //pt1[8] = 'A'; // error // Runtime Error: 읽기 전용.. 더보기
10 Array, Pointer 10-01. 배열과 메모리 자료형의 크기만큼 메모리가 계산된다! 10-02. 배열의 기본적인 사용방법 #define MONTHS 12 //symbolic constant, macro int main() { int high[MONTHS] = {2,5,11,18,23,27,29,30,26,20,12,4}; // Address printf("%p %p \n", high, &high[0]); for (int i =0; i < MONTHS; ++i) printf("%lld \n", (long long)&high[i]); // 10진수로 출력하여 4씩 증가하는지 확인(int이므로) printf("\n"); ///* complier doesn&#39;t check whether indices are valid!! *.. 더보기
12 Orthogonal Projections Projections onto subspaces Then we can say that like this. We already have seen that vector x in R can be represented by a vector in V and a vector in complement orthogonal. Visualizing a projection onto a plane The projection of x onto L, x - $proj_L x$ is orthogonal to L!! Projection is closted vector in subspace Projection of x onto v is the closest vector in our subspace to x. It's closer th.. 더보기