[C언어] - 배열과 포인터의 관계
·
🖥 Language/C , C++
우리가 지난 번에 배웠었던 배열과 포인터는 사실 밀접한 관계를 가지고 있습니다. 그것이 어떤 관계인지 이 포스팅을 통해서 알아보도록 하겠습니다. 배열과 포인터 표기법 포인터는 포인터가 가리키는 메모리의 시작 주소를 기준으로 삼고, 배열은 배열이 사용하는 메모리의 시작 주소를 기준으로 삼습니다. "각각의 자료형(포인터, 배열)들이 메모리의 시작 주소를 기준으로 삼는다" 이것은 배열과 포인터의 놀라운 공통점입니다. 그 말은 배열과 포인터 각각의 문법을 서로 교차해서 사용할 수 있다는 뜻이기도 합니다. // 배열의 표기법 char data[5]; data[1] = 5; // *(data + 1) = 5; 는 data[1] = 5와 100% 일치합니다. *(data + 1) = 5; // 포인터의 표기법 cha..
[컴퓨터 구조] - 카르노 맵 간략화 (Karnaught Map, K-map)
·
💻 Computer Science/컴퓨터 구조
"카르노 맵(K-Map)"은 논리식을 체계적으로 간소화하는 방법입니다. 지금부터 카르노 맵에 대해서 알아보도록 하겠습니다. 조합 논리 회로 설계 절차 기본적인 조합 논리 회로 설계 절차는 다음과 같습니다. 1. 문제가 제시된다. 2. 입력 신호와 출력 신호에 문자 기호를 정한다. 3. 진리표를 만든다. 4. 각 출력 신호에 대한 간소화된 논리식을 만든다. 5. 논리도를 그린다. 이 과정을 통하여 조합 논리 회로를 설계합니다. 그리고 조합 논리 회로 설계에 필요한 개념들이 있는데, 그것들에 대해서도 알아보겠습니다. 최소항(Minterm) "최소항"은 "모든 입력 변수를 포함하는 AND 항"을 의미합니다. 예를 들면 A, B, C 이렇게 3개의 입력값이 있을 때, A'BC는 최소항입니다. 그러나 AB' 항은..
[컴퓨터 구조] - 부울 대수 법칙 (Boolean Algebra)
·
💻 Computer Science/컴퓨터 구조
논리 회로를 구성하기 위해서 진리표를 보고 "직감적으로" 구성하는 방식으로 논리 회로를 설계하는 것은 무리가 있습니다. 간단한 논리 회로일 때는 별 문제가 없겠지만, 복잡한 회로가 된다면 최적화 문제 등에 부딪히게 되기 때문입니다. "부울 대수"는 하나의 명제가 참 또는 거짓임을 판단하는 데 사용되는 수학적 방법인데, 이 부울 대수의 규칙을 통해 최적의 논리 회로를 설계할 수 있습니다. 지금부터 부울 대수 법칙에 대해서 알아보도록 하겠습니다. 부울 대수 법칙 부울 대수 법칙은 생각보다 굉장히 많습니다. 중고등학교 수준의 수학(집합, 명제 등)을 할 줄 안다면 쉽게 이해할 수 있습니다. Commutative (교환 법칙) 1) $x + y = y + x$ 2) $x * y = y * x$ Associati..
[자료구조] - 스택(Stack)
·
💻 Computer Science/자료구조-알고리즘
스택의 정의 "스택"은 컴퓨터에서 굉장히 많이 사용하는 자료구조 중 하나입니다. 대표적으로 인터넷에서 뒤로 가기를 누르면 현재 진행되는 웹에서 이전에 수행되던 웹사이트로 돌아갑니다. 이것이 스택의 예시 중 하나입니다. 스택은 '쌓다, 더미'라는 뜻을 가지고 있는데, 이에 뜻에 걸맞게 스택은 데이터를 차곡차곡 쌓아올린 형태인 자료구조입니다. 창고에 쌓여있는 상자를 예시로 들어봅시다. 창고에 새로운 상자를 쌓을 때는 상자의 가장 윗 부분에 놓습니다. 그리고 필요하다면 상자더미에서 가장 위에 있는 상자를 꺼내게 됩니다. 그렇지 않고 상자더미의 가장 아래에 있는 상자를 꺼낸다면 상자더미는 붕괴될 것입니다. 이러한 형태를 후입선출(LIFO: Last-In First-Out)이라고 합니다. 스택 자료구조는 이러한 ..
[C언어] - 포인터(Pointer)
·
🖥 Language/C , C++
사람들이 C언어를 공부할 때 가장 어려워하고 넘을 수 없는 장벽 같이 느끼는 부분이 바로 "포인터"입니다. 사실 포인터도 개념을 잘 이해하면 큰 무리 없이 배울 수 있습니다. 지금부터 포인터에 대해서 자세히 알아보도록 하겠습니다. 포인터(Pointer) 포인터도 마찬가지로 "특정한 값을 가지는 변수입니다." 그 특정한 값은 바로 "주소값" 입니다. 포인터는 특정한 데이터의 주소값을 저장하는 변수입니다. 포인터를 정확히 이해하기 위해서는 컴퓨터가 메모리 주소를 어떻게 지정하는지 알아야 합니다. 여기에는 "직접 주소 지정 방식"과 "간접 주소 지정 방식" 이렇게 2가지 방식이 존재합니다. 직접 주소 지정 방식: 말 그대로 메모리를 사용할 때 프로그래머가 사용할 메모리 주소를 직접 적는 방식입니다. 간접 주소..
[C언어] - 배열(Array)
·
🖥 Language/C , C++
C언어가 아니더라도 대부분의 프로그래밍 언어에서는 "배열"을 지원합니다. 그만큼 중요한 개념이며 많이 쓰이는 개념 중 하나입니다. 배열에 대한 구체적인 이해는 프로그래밍 언어에 대한 이해도를 한층 높여주며, 배열 자료구조는 프로그래머로서 반드시 확실하게 습득하고 넘어가야 합니다. 지금부터 C언어를 활용한 "배열"에 대해서 알아보도록 하겠습니다. 배열(Array) 배열의 정의 배열은 짧게 말해 "같은 자료형의 변수들로 이루어진 집합"입니다. 배열을 선언하는 방법은 간단합니다. 변수를 선언하는 것과 비슷합니다. 다른 점이라면 [ ] 기호를 이용하여 저장 공간의 크기를 명시한다는 것입니다 . 이때, 저장 공간의 크기를 명시할 때는 반드시 "숫자 상수"여야 합니다. int student[20]; // int형 ..
[컴퓨터 구조] - 논리 회로 표현 방식 (논리 회로 기초)
·
💻 Computer Science/컴퓨터 구조
컴퓨터 내부에서 수행되는 "기계어"는 2진수 형태입니다. 그러나 프로그래머가 기계어를 직접 다루는 것은 너무 어렵고 힘들기에 "고급 프로그래밍 언어(High-Level)"를 사용합니다. 즉, 고급 프로그래밍 언어는 사람에게 적합한 언어이고 기계어는 컴퓨터에게 적합한 언어입니다. 그렇다면 여기서 궁금증이 하나 생길 수 있습니다. "기계어가 컴퓨터에게 적합한 언어라면 기계어의 밑에는 무엇이 있을까" 이 질문은 논리 회로를 공부하기 위해 반드시 던져봐야 하는 질문입니다. 지금부터 이 질문에 대해 답을 구해보며 논리 회로에 대해 본격적으로 공부해보도록 하겠습니다. 논리 회로 기초 기계어 밑에는 무엇이 있을까? 이 질문에 대한 답은 간단합니다. 바로 "하드웨어"가 있습니다. 하드웨어 위에서 기계어가 수행되는 것입..
loading