본문 바로가기

Programming/Knowledge24

2의 보수 2의 보수 2의 보수는 대부분의 산술연산에서 원래 숫자의 음수처럼 취급됩니다. 2의 보수를 구하기 위해서는 2가지 방법이 있으며, 첫째로는 주어진 이진수보다 한 자리 높고 가장 높은 자리가 1이며 나머지가 0인 수에서 주어진 수를 빼서 얻은 수가 2의 보수입니다. 두번째로 주어진 이진수의 모든 자리의 숫자를 반전시킨 뒤 여기에 1을 더하면 2의 보수를 얻을 수 있습니다. 예를 들어 8자리의 이진수 01001011의 2의 보수를 구하면 아래와 같습니다. (십진수 75)8+1=9자리의 비트 100000000 에서 8자리 비트 01001011 을 뺍니다. 그럼 10110101 이 나옵니다. 두번째 방법으로는 1의 보수를 이용하여 2의 보수를 구하면 됩니다.01001011 의 모든 자리의 수를 반전시킵니다. 그.. 2018. 5. 8.
SSD(Solid State Drive) / Flash Memory Solid State Drive 고형 상태 보조기억장치. HDD를 대체하기 위해 개발된 신세대 보조저장장치입니다. 하드디스크는 자기 디스크로 이루어졌으나 SSD는 플래시 메모리로 이루어집니다. 구동부가 없어 소음이 없으며, 일반용은 소모 전력 및 발열도 적습니다. 가장 큰 장점으로는 데이터 입/출력 속도입니다. 파일 전송 속도가 HDD에 비해 매우 빠릅니다. 그 다음 장점은 아주 작고 가볍다는 점입니다. 하드디스크는 플래터와 그 플래터를 감싸는 몸체, 플래터를 구동하기 위한 모터 등의 구조물로 인해 일정한 두께 이하로 줄이기 어려움. 이 떄문에 컴퓨터 체감 속도를 비약적으로 상승시켰다는 평가를 받습니다. 하드디스크의 물리적 탐색시간 앞에서 병목현상이 걸려 버벅이는 경우가 허다했습니다. 그래도 아직은 하드.. 2018. 5. 7.
캐시 메모리(Cache memory) 개요 컴퓨터 시스템의 성능으 향상시키기 위해 주로 CPU 칩 안에 포함되는 빠르고 작고 매우 비싼 메모리입니다. 프로그램에서 직접적으로 읽거나 쓸 수 없고 하드웨어의 메모리 관리 시스템이 내부적으로 제어합니다. 대부분의 프로그램은 한번 사용한 데이터를 다시 사용할 가능성이 높고, 그 주변의 데이터도 곧 사용할 가능성이 높은 데이터 지역성을 가지고 있습니다. 데이터 지역성을 활용하여 메인 메모리에 있는 데이터를 캐시 메모리에 불러와 두고, 시피유가 필요한 데이터를 캐시에서 먼저 찾도록 하면 시스템 성능을 향상 시킬 수 있습니다. CPU의 클럭속도가 매우 빨라짐에 따라 디랩과의 속도 차이가 현저하게 증가하였는데, 이 때문에 CPU클럭 속도를 아무리 올려도 DRAM에서 데이터를 빠르게 제공해 주지 못하여 전체.. 2018. 5. 7.
LinkedList (연결 리스트) 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051#include #include "DLinkedList.h" int WhoIsPrecede(int d1, int d2) { if (d1 2018. 5. 7.
도커(Docker)란 무엇인가? 초보를 위한 도커 안내서 https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html 목차 도커란 무엇인가.설치하고 컨테이너 실행하기.이미지 만들고 배포하기. 서버를 관리한다는 건 복잡하고 어려우며 고급 개발자들의 섬세한 작업이 필요한 영역입니다. 맨 처음 했던 일은 매뉴얼을 보고 Redhat Enterprise Linux 4에 Oracle 10g을 설치하는 일이였습니다. 정확히 기억이 나지는 않지만 설치 매뉴얼은 길고 복잡했고 알 수 없는 이유로 자꾸 설치를 실패하였습니다. 제대로 설치가 되지 않으면 다시 OS를 설치하는 것부터 반복하여 몇 번을 재설치한 끝에 성공하곤 했습니다. 회사에서 사용하는 리눅스와 오라클 버전은 딱 정해져 있었고 버전을 .. 2018. 5. 4.
힙(heap) 목차 개요기본 구조값 삽입최대값 삭제힙 정렬C++ STL priority_queue 개요 힙은 이진 트리를 활용한 자료구조이며, 종류로는 최소 힙과 최대 힙이 있습니다. 최대 힙을 알면 최소 힙을 만드는 건 어렵지 않습니다. 최대 힙 자료구조는 기본적으로 아래의 세 연산을 빠르게 수행하기 위한 자료구조입니다. 최대 힙에 새로운 값을 삽입.최대 힙 안의 최대값을 삭제.최대 힙 안의 값 중에 최대값 찾기. 세 연산을 배열로 간단하게 처리하려고 하면, 삽입은 오1로 가능하더라도 최대값을 찾기에서 오엔이 필요함을 알 수 있습니다. 배열에서 최대값을 찾기 위해서, 배열 안의 모든 값을 조사하는 선형 검색이 필요하기 때문입니다. 반면에 힙은 이 세 개의 연산을 모두 빠르게 수행하기 위해 사용하는 자료구조로 삽입과 .. 2018. 5. 4.
SIMD 병렬 프로그래밍 예제 1 멀티 데이터를 하나의 명령어로 처리하는 것. 시간을 재보니 4배가량의 속도 차이가 남.. #include #include #include const int n = 1000000000;__m128i a, b, r;__declspec(align(16)) short v1[8] = { 1,2,3,4,5,6,7,8 };__declspec(align(16)) short v2[8] = { 8,1,7,2,6,3,5,4 };__declspec(align(16)) short result[8]; int main() {clock_t startTime, endTime;double nProcessExcuteTime;startTime = clock(); /*현재 시각을 구한다.*/// SISDfor (int i = 0; i < n.. 2018. 4. 27.
QuickSort #include #include using namespace std; void Swap(int arr[], int idx1, int idx2) {int temp = arr[idx1];arr[idx1] = arr[idx2];arr[idx2] = temp;} int Partition(int arr[], int left, int right) { int pivot = arr[left];int low = left + 1;int high = right; while (low = arr[low] && low 2018. 4. 25.
선택 정렬 최소값을 찾아서 왼쪽으로 이동시키는데 배열크기만큼 반복하여 정렬하는 방법.선택정렬의 비교회수는 다음과 같습니다. 선택정렬의 연산시간은 다음과 같습니다.선택정렬의 장점은 데이터의 양이 적을 때 아주 좋은 성능을 나타냅니다.데이터의 양이 적을 떄 아주 좋은 성능. 작은 값을 선택하기 위해서 비교는 여러 번 하지만 교환횟수가 적습니다. 선택정렬의 단점. 가장 작은 값과 현재값을 교환하는 방식. 100개 이상의 자료에 대해서는 속도가 떨어져서 적절히 사용되기가 어렵습니다. #include #include void Select_Sort(int parm_data[], int parm_count){int min_data = 0, min_index = 0;int i, j;int comparison_count = 0; .. 2018. 4. 20.
리팩토링 나쁜 디자인의 코드를 좋은 디자인으로 바꾸는 방법 리팩토링이란 무엇인가요리팩토링은 외부동작을 바꾸지 않으면서 내부 구조를 개선하는 방법으로, 소프트웨어 시스템을 변경하는 프로세스입니다. 리팩토링시 중요한 점은소프트웨어를 보다 이해하기 쉽고, 수정하기 쉽도록 만드는 것이며, 겉으로 보이는 소프트웨어의 기능을 변경하지 않는 것입니다. 따라서, 리팩토링을 할 때는 기능을 추가해서는 안되고, 단지 코드의 구조에만 신경 써야 합니다. 프로그램의 가치를 높이는 것입니다. 2. 왜 해야 하는가?소프트웨어의 디자인을 개선시킵니다. 정기적인 리팩토링은 코드가 디자인을 유지하도록 도와줍니다.소프트웨어를 더 이해하기 쉽게 만듭니다. 버그를 찾도록 도와줍니다. 3. 언제 해야 하는가?리팩토링 자체를 목적으로 삼는 것이 아니라.. 2018. 3. 21.