[CS] 음수의 표현 (2의 보수)

2025. 3. 12. 23:50· → Computer Science
목차
  1.  ➖ 뺄셈을 하는 방법
  2. 2️⃣ 2의 보수
  3. 🍏 Swift에서 정수

어렴풋이 알고 있었는데 정확하게 정리해 보고자 이렇게 글을 써보고자 한다. 과연 컴퓨터는 음수를 어떻게 표현할까?

 

8비트를 기준으로 아래와 같은 숫자 5가 있다고 생각해 보자. 

0 0 0 0 0 1 0 1

음수를 어떻게 표현할 수 있을까? -5를 나타내면 되니까 맨 마지막 자리 수를 양수는 0 음수는 1로 생각하면 어떨까?

1 0 0 0 0 1 0 1

만약에 이 두 수를 더한다면? 결코 0이 나오지 않을 것이다. 결국 그렇다는 것은 덧셈을 할 때 복잡한 방식을 취해야 한다는 것이다. 또한 +0, -0 두 가지 경우의 0이 생기기 때문에 중복을 해결해줘야 하는 문제도 발생한다.

  0 0 0 0 0 1 0 1 (5)
+ 1 0 0 0 0 1 0 1 (-5)
--------------------
  1 0 0 0 1 0 1 0

 ➖ 뺄셈을 하는 방법

뺄셈을 하는 방법은 음수를 더해주는 방법이 있다. 예를 들면 5 - 3 는 5 + (-3) 로 표현할 수 있다. 이때 보수라는 개념을 사용할 수 있는데 예를 들면 5 - 3의 경우 10의 보수인 7을 5에 더해주고 마지막 자릿수를 없애주면 된다. 결국 5 - 3 → 5 + (-3) → 5 + 7 → 12 → 2 로 구할 수가 있게 된다. 결국 이진법인 컴퓨터는 2의 보수를 활용해서 뺄셈을 하면 된다.

2️⃣ 2의 보수

2의 보수는 1의 보수에서 1을 더해주면 된다. 이렇게 이야기하는 이유는 0이 있기 때문이다. 0이 있게 되면 2의 보수는 2가 되고 그렇게 되면 한 자리씩 올라가기 때문에 머리가 복잡해진다. 하지만 1의 보수는 구하기가 너무 편하다 왜냐하면 비트를 반전시키면 된다!

 

우선 아래의 숫자 5를 예시로 들어보자.

0 0 0 0 0 1 0 1

1의 보수를 구하면 아래와 같다.

1 1 1 1 1 0 1 0

그렇게 되면 두수를 모두 더하게 되면 모든 자릿수는 1이 되기 때문에 1의 보수라고 할 수 있다.

  0 0 0 0 0 1 0 1
+ 1 1 1 1 1 0 1 0
-----------------
  1 1 1 1 1 1 1 1

그렇다면 1의 보수에서 1을 더하게 되면 어떻게 될까?

  1 1 1 1 1 0 1 0
+ 0 0 0 0 0 0 0 1
-----------------
  1 1 1 1 1 0 1 1

다음과 같은 수가 나오게 되는데 바로 이것이 -5를 2의 보수로 구한 값이다.

 

그렇다면 5 + (-5) 를 하게 된다면? 아래와 같이 되는데 마지막 자릿수를 없애고 나면 0이 된다.

  0 0 0 0 0 1 0 1
+ 1 1 1 1 1 0 1 1
-----------------
1 0 0 0 0 0 0 0 0

이렇게 해서 음수를 나타낼 수 있게 되었다! 하지만 부호없는 정수와 부호가 있는 정수가 구분되게 되었고, 부호가 있는 정수의 경우 최상위 비트 (MSB, most significant bit) 를 통해 음수와 양수를 구분한다.

🍏 Swift에서 정수

아래와 같이 Swift에서는 Int로 부호가 있는 정수(Signed Integer)를 표시하고, UInt로 부호가 없는 정수(Unsigned Integer)를 표현한다.

print(Int8.min)   // -128 (10000000)
print(Int8.max)   // 127  (01111111)
print(UInt8.min)  // 0
print(UInt8.max)  // 255

print(Int.min)   // -9,223,372,036,854,775,808
print(Int.max)   // 9,223,372,036,854,775,807
print(UInt.min)  // 0
print(UInt.max)  // 18,446,744,073,709,551,615

Int는 양수 19자리, 음수 19자리까지 표현이 가능하다.

'→ Computer Science' 카테고리의 다른 글

[CS] HDD의 구조 및 스케줄링  (0) 2025.03.26
[CS] 소수의 표현  (0) 2025.03.13
[CS] 데이터의 전송  (0) 2025.02.10
[CS] 정보단위  (0) 2025.01.31
[CS] 프로세스와 스레드 딥다이브 - 4. 스레드  (0) 2025.01.18
  1.  ➖ 뺄셈을 하는 방법
  2. 2️⃣ 2의 보수
  3. 🍏 Swift에서 정수
'→ Computer Science' 카테고리의 다른 글
  • [CS] HDD의 구조 및 스케줄링
  • [CS] 소수의 표현
  • [CS] 데이터의 전송
  • [CS] 정보단위
Swift librarian
Swift librarian
Swift librarian
Swift Library
Swift librarian
전체
오늘
어제
  • 분류 전체보기 (229) N
    • 📺 Programming (5)
    • → Architecture (2)
    • → Design Pattern (0)
    • → Computer Science (15)
    • ⚙️ Algorithm (0)
    • → 알고리즘 관련 (22)
    • → Problems (102) N
    • 🚀 Project (0)
    • → 알쏭달쏭 (0)
    • → Shook (2)
    • → Solver (8)
    • → Taster (7)
    • → Outline (4)
    • → Pointer (2)
    • → Guesser (3)
    • 🦜 Swift (2)
    • → Swift Archive (12)
    • → Swift Study (12)
    • → Xcode (6)
    • 🧰 Framework (0)
    • → Foundation (1)
    • → UIKit (2)
    • → SwiftUI (3)
    • → CoreData (2)
    • → MapKit (1)
    • → CoreHaptic (1)
    • → User Notification (1)
    • → StoreKit (2)
    • 🏛️ Library (0)
    • → TCA (0)
    • 🐈‍⬛ Git (8)
    • → Git의 원리 (2)
    • → Git 심화 (1)
    • 📦 Other (1)
    • 👦🏻 Log (0)

최근 글

hELLO · Designed By 정상우.v4.2.2
Swift librarian
[CS] 음수의 표현 (2의 보수)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.