_

Always be tactful

개인 학습/CS 9

[CS] 컴퓨터의 연산 방식 (feat. 1의 보수 & 2의 보수)

들어가기에 앞서,컴파일이란 무엇인가?  C, C++, Java, Python 같이 우리가 일반적으로 사용하는 프로그래밍 언어를 고급 언어라고 하며, 기계어와 어셈블리어를 저급 언어라고 한다. 가장 쉬운 구분법은 해당 언어가 인간친화적인지 기계친화적인지를 따지는 것이다.  인간친화적인 고급 언어는 우리가 읽고 쓰기 편하지만 이를 그대로 전달한다면 컴퓨터는 이해할 수 없다. 이유를 간단히 설명하자면, 컴퓨터는 전기 신호를 바탕으로 이해하는데 이를 `있다(1)`와 `없다(0)` 정도로만 구분하기 때문이다.  CPU가 직접 해석하고 실행할 수 있도록, 사람이 작성한 고급 언어인 `코드`를 `기계어`로 번역하는 것을 `컴파일`이라고 한다.소스 코드를 실행 가능한 파일로 만드는 전체 과정을 `빌드`라고 하며, 컴파..

개인 학습/CS 2025.03.26

[CS] 1.1 + 0.1 != 1.2인 이유

컴퓨터에서 실수는 어떻게 저장될까? 컴퓨터는 모든 정보를 2진수로 표현한다. 실수 역시 2진수로 표현해 RAM에 저장하게 되는데, 이 과정에서 실수 값 일부가 손실되어 정확한 값이 아닌 근삿값을 저장하게 된다.  예를 들어, 0.1을 2진수로 표현하면 0.00011001100110011...이라는 무한소수가 된다. 숫자 하나를 저장하는 bit는 통상적으로 32비트이므로 뒷부분이 잘려나가게 되고, 이로 인해 오차가 발생하여 실제로 저장되는 값은 0.10000000000000000555...가 되어 미세한 오차를 발생시킨다. ▶ 자료형 double을 활용하자. C언어라면 double 자료형을 활용해서 숫자 하나당 64비트를 배정하여 오차를 급격하게 줄일 수 있지만 메모리 용량이 2배가 필요하다는 단점이 있다..

개인 학습/CS 2024.12.14

[DS] 스택, 큐, 덱

자료구조의 일종으로, 각기 다른 방식으로 데이터를 저장하고 관리한다. 스택[정의] 데이터를 차곡차곡 쌓는다는 의미인 스택은 top을 통해서만 접근이 가능하기 때문에 push와 pop 모두 top에서 이루어진다. 마지막에 추가된 데이터가 가장 먼저 제거되는 후입선출(後入先出) 구조를 따른다. 물론 프로그래밍 언어와 구현에 따라 서로 다른 자료형을 혼합하는 경우도 있을 수 있지만, 일반적으로는 동일한 자료형으로 구성된다. 그래야 안정성이 보장되기 때문이다. [장점] 스택은 리스트로 구현되어 있다. 각 요소가 배열의 끝에 추가되며, 필요할 때에만 메모리가 할당되어 메모리 사용이 효율적이다. 재귀 함수 호출 시에도 스택 특유의 후입선출 구조가 자연스러운 관리를 유도한다.▲ 구현이 간단하고 메모리 사용이 효율적이..

개인 학습/CS 2024.11.26

[Python] 배열: 인덱스의 시작은 0인가, 1인가?

배열 배열은 여러 개의 요소를 저장할 수 있는 일종의 자료구조이다. 연결된 빈칸 위의 숫자는 각각의 인덱스를 뜻하며, 우리가 흔히 알고 있는 모든 프로그래밍 언어에서 배열의 인덱스는 0부터 시작한다. 슬라이싱의 경우 마지막 인덱스에 해당하는 값은 결과에서 제외시킨다. 이해를 돕기 위해 이를 인덱싱의 "이상:미만 규칙"이라고 표현하겠다.  이러한 "이상:미만 규칙"으로 작동하는 이유는 가장 효과적이기 때문이다. 일단, 시작 인덱스를 포함하는 "이상" 구조가 시작 숫자를 직관적으로 표현해 범위의 시작을 명확히 한다. 이어서, 끝 인덱스를 포함하지 않는 "미만" 구조는 시퀀스의 연속을 표현하기 위해 불가피하면서도, 시퀀스의 길이를 직관적으로 알아낼 수 있도록 만드는 장점을 지닌다. 배열의 인덱스가 1이 아닌 ..

개인 학습/CS 2024.11.05

[DS] 자료구조란?

자료구조 자료구조는 데이터의 조직, 관리 및 저장을 의미하는 컴퓨터 과학의 핵심 개념이다. 컴퓨터가 데이터를 효율적으로 다룰 수 있도록 돕는 총체적인 것이라고 이해하면 쉽다. 현재 많은 프로그래밍 언어와 라이브러리가 이러한 기본적인 자료구조를 따르기 때문에 자료구조를 잘 알아두어야 관련 도구들을 효과적으로 활용할 수 있다.  무엇보다, 적절한 자료구조를 선택하면 코드의 명확성이 향상되고 유지관리가 쉬워진다. 이는 데이터의 의도된 용도와 데이터에서 수행되는 작업을 명확히 할 수 있다는 의미이다. 다양한 자료구조는 검색, 삽입, 삭제 등 다양한 작업에 최적화될 수 있으며, 최종적으로는 데이터의 효율적인 처리로 알고리즘의 성능이 크게 향상할 수 있다.

개인 학습/CS 2024.10.22