Skip to content

Commit

Permalink
Update 2024-10-25-os.md
Browse files Browse the repository at this point in the history
  • Loading branch information
yulmwu committed Nov 1, 2024
1 parent bf9f36a commit 0d6d075
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions _posts/fast/2024-10-25-os.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ tags: ["컴퓨터", "하드웨어", "CPU"]
1. [데이터](#1-1-데이터)
1. [n진법](#1-1-1-n진법)
2. [2진법](#1-1-2-2진법)
1. [2진법의 음수 표현](#1-1-2-1-2진법의-음수-표현)
3. [그 외 진법](#1-1-3-그-외-진법)
4. [문자의 표현](#1-1-4-문자의-표현)
1. [ASCII](#1-1-4-1-ascii)
Expand Down Expand Up @@ -116,6 +117,37 @@ tags: ["컴퓨터", "하드웨어", "CPU"]

이 과정을 반대로 하면 10진수를 2진수로 변환할 수 있다. 이 방법 말고도 다른 방법이 있으나, 다른 글을 참고하길 바란다.

#### 1-1-2-1. 2진법의 음수 표현

그럼 음수는 어떻게 표현되는가에 대한 궁금증을 가졌을 수 도 있다.

결론부터 말하면 **2의 보수**를 통해 음수로 변환하여 연산한다.
보수의 사전적 의미는 보충해주는 수인데, 10진법에서 2에 대한 5의 보수는 3이 된다. 필자가 수학을 좋아하진 않으나 자세한 설명은 생략하겠다..

2진법에서 1의 보수는 모든 자리의 수를 1로 만드는 수이다. 즉 `0101₂`(5)의 1의 보수는 `1010₂`(10)가 된다.

그 다음으로 2의 보수는 1의 보수에 1을 더하면 된다. 예를 들어 `0101₂`(5)의 1의 보수는 `1010₂`(10)이고, 2의 보수는 `1011₂`(11)가 된다.
검산을 했을 때 `0101₂` + `1011₂` = `1 0000₂`이 되므로, 2의 보수가 맞다.

왜 1의 보수와 2의 보수를 설명했냐, 먼저 1의 보수를 이용한 음수 표현을 알아보자.

음수는 최상위 비트(가장 왼쪽의 비트)를 부호 비트로 사용한다.(`0` = 양수, `1` = 음수) 그리고 남은 비트의 1의 보수를 구하면 음수가 된다.
즉 기존의 양수가 2^8개(256)의 수를 표현할 수 있었다면, 최상위 비트를 부호 비트로 사용하기 때문에 표현 범위는 -127 ~ 127가 된다.

하지만 여기서 문제점이 발생하는데, 0의 보수 `1111 1111₂`과 0인 `0000 0000₂`, 즉 0이 2개가 된다. 이러한 문제점으로 고안된 것이 2의 보수이며, 오늘날엔 2의 보수를 사용한다.
2의 보수로 설정하게 되면 -128 ~ 127개로 위 문제가 해결된다.

예시로 `-3 + 5`를 계산 해보자. 3의 2의 보수는 `1111 1101₂`이고, 5는 `0000 0101₂`이다. 이를 더하면 아래와 같다:

```
1111 1101 (-3)
+ 0000 0101 (5)
---------
1 0000 0010 (2)
```

여기서 최상위비트 1은 캐리이다.

### 1-1-3. 그 외 진법

이 외에도 8진법이나 16진법 등이 있으나, 16진법의 경우 컴퓨터를 다루다보면 자주 등장하는 진법이니 간략히 설명하겠다.
Expand Down

0 comments on commit 0d6d075

Please sign in to comment.