📚 /2025 CS STUDY

1. 소개


컴퓨터는 명령어를 처리하는 기계이다. 즉, 명령어는 컴퓨터를 실질적으로 작동시키는 매우 중요한 정보이다. 우리가 C, C++, Java, Python과 같은 프로그래밍 언어로 만든 소스 코드는 컴퓨터 내부에서 명령어로 반환된다. 이 명령어의 정체가 무엇인지 한번 공부해보자!



2. 고급 언어와 저급 언어


컴퓨터는 C, C++, Java, Python과 같은 프로그래밍 언어를 이해할 수 없다. 이 언어들은 사람이 이해하고 작성하기 쉽게 만들어진 고급 언어 이기 때문이다. 반대로 컴퓨터가 직접 이해하고 실행할 수 있는 언어를 저급 언어라고 한다. 따라서 우리가 고급 언어를 사용해 열심히 프로그래밍한 결과물은 저급 언어로 변환 과정을 거쳐야 컴퓨터가 비로소 이해하고 실행할 수 있는 것이다.

저급 언어에는 기계어와 어셈블리어, 이렇게 두 가지 종류가 있다.



3. 이진수의 음수 표현


컴퓨터에서 숫자를 다룰 때 이진수는 필수적인 존재이다. 그런데 이 이진수로 양수뿐만 아니라 음수도 표현할 수 있다는 사실을 알고 있는가? “0과 1로만 이루어진 이진수로 어떻게 음수를 표현할 수 있을까?“라는 의문이 들 수 있다. 컴퓨터 세계에서 음수를 표현하는 다양한 방법과 그 원리를 알아보자.

컴퓨터는 사람처럼 “이건 양수, 저건 음수"라고 직관적으로 판단하지 못한다. 대신, 이진수를 음수로 해석할 수 있는 몇 가지 규칙(약속)을 만들어 두었다. 그중 가장 간단한 아이디어는 특정 비트를 “부호 비트"로 정하는 것이다.

부호 비트(Sign Bit)

맨 앞의 비트를 부호로 사용한다.

하지만 부호 비트를 사용하는 방식에는 문제가 있다. 음수와 양수를 동일하게 다루기 어렵다는 점이다. 이에 조금 더 똑똑한 방법으로 보수를 사용하는 방법이 등장했다. 컴퓨터는 기본적으로 덧셈만 할 수 있다. 그렇다면 뺄셈은 어떻게 할까? 바로 **보수(Complement)**라는 아이디어가 이 문제를 해결한다. 보수를 사용하면 덧셈만으로도 뺄셈을 구현할 수 있다. 보수에는 두 가지 주요 방식이 있다.

1의 보수

10100101

1의 보수는 간단하다. 이진수의 모든 비트를 반전시키는 방식이다. 음수를 표현할 때는 이렇게 반전된 값을 사용한다. 하지만 1의 보수 방식에는 +0-0이라는 두 가지 0이 존재한다는 문제가 있다. 이로 인해 연산이 비효율적이다.

2의 보수

10101011

2의 보수는 음수를 표현하는 가장 널리 쓰이는 방식이다. 방법은 간단하다. 우선 모든 비트를 반전(1의 보수)한다. 그 결과에 1을 더한다. 2의 보수는 뺄셈을 덧셈처럼 구현할 수 있다는 장점이 있다. 예를 들어 7 - 57 + (-5)로 처리할 수 있다. 이 덕분에 컴퓨터는 덧셈기 하나만으로도 뺄셈을 해결할 수 있다.

현대 컴퓨터는 거의 모두 2의 보수를 사용한다. 그 이유는 다음과 같다:

  1. 효율성: 뺄셈을 덧셈으로 구현할 수 있다.
  2. 일관성: +0-0 같은 애매한 경우가 없다.
  3. 연산의 단순화: 부호와 크기를 따로 고려할 필요 없이 같은 방식으로 처리할 수 있다.


4. 이진수의 연산


이진수 또한 십진수와 같이 덧셈과 뺄셈이 가능하다. 덧셈의 경우 우리가 익히 배웠듯이 각 자리의 덧셈 결과가 2가 될 경우 자리올림(carry)이 일어난다. 그렇다면 뺄셈은? 뺄샘을 한번 살펴보자. 컴퓨터는 뺄셈을 덧셈과 보수 개념을 통해 접근한다. 즉, 양수 - 양수 가 아니라 양수 + 음수 개념으로 인지하는 것이다. 이때 앞에서 살펴본것처럼 음수부를 표현하는 방식이 각기 다르다. (1의 보수, 2의 보수..)

a - b

2의 보수 방식의 장점

  1. 뺄셈을 덧셈으로 처리: 추가적인 뺄셈 회로가 필요 없으므로 하드웨어 구현이 간단해진다.
  2. 유일한 0: +0-0의 구분이 없어 연산의 일관성이 높다.
  3. 오버플로우 처리 용이: 자리올림을 무시해도 결과값이 정확히 계산된다.
  4. 부호와 크기의 통합: 음수와 양수를 동일한 방식으로 연산할 수 있다.


5. 실습 문제


실습 문제 1

프로그램이 실행되려면 반드시 (빈칸)에 저장되어 있어야 합니다 혼자 공부하는 컴퓨터 구조+운영체제: 실습 문제 3번 51p

프로그램이 실행되려면 반드시 메모리에 저장되어 있어야 한다.

실습 문제 2

1101(2) 의 음수를 2의 보수 표현법으로 구해보세요 혼자 공부하는 컴퓨터 구조+운영체제: 실습 문제 3번 65p

1101(2)의 음수를 2의 보수로 표현하면 0011(2)이다. 이는 10진수로 -13을 나타낸다.



6. Reference