2의 보수

2025. 4. 16. 18:03JAVA/JAVA 실행 원리

💾 2의 보수란?

2의 보수는 컴퓨터에서 음수를 표현하는 방법 중 가장 일반적인 방식이다.

자바는 내부적으로 2의 보수 체계를 사용해서 정수형(int, byte, short, long)의 음수를 저장한다.

 

 

💽 2의 보수 이전 시대

1. 부호-절댓값(Sign-Magnitude) 표현 방식

            ────                    절댓 값                                     ────┐                            

MSB
2⁷
          0000000000 LSB
2⁰

 sign bit

0 : 양수

1 : 음수

  • 가장 왼쪽 비트(MSB)를 부호로 사용 ( 0 = 양수, 1= 음수)
  • 나머지 비트는 절댓값만 표현

예제

+5 0000 0101
-5 1000 0101

 

⚠️ 문제점

  • +0과 -0이 따로 존재(0000 0000, 1000 0000) → 비효율
  • 덧셈 회로가 복잡해짐 (음수 더할 때는 연산 방식이 달라짐)

2. 1의 보수(One's Complement) 표현 방식

1번의 방식을 차용하고 음수는 추가로 각 bit를 반전시킴

 

 예제

+5    0000 0101
       bit 반전
-5    1111 1010

 

⚠️ 문제점

  • 여전히 +0과 -0이 존재 (0000 0000, 1111 1111)
  • 덧셈 시 캐리 비트를 별도로 더해야 함 → 연산 속도 저하

‼️ 그래서 나온 것이 2의 보수 ‼️

2의 보수는 1의 보수에  + 1을 한 방식

  • +0과 -0 (0000 0000) 중복 해결
  • 뺄셈을 덧셈으로 통일 가능
  • 하드웨어가 더 단순하고 빠르게 계산 가능

 예제

-128을 구할 때

128
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0

                                 

                                             ↓ 1의 보수

bit반전 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1

 

                                                       ↓  + 1

-128 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0

🎥 왜 2의 보수가 승자가 되었는가?

항목 설명
하드웨어 구현 용이성 뺄셈도 덧셈 회로 하나로 처리 가능  → 회로 구조 단순화
0의 개수 +0, -0 없이 단 하나의 0(0000 0000)만 존재
음수 표현 방식 비트 반전후 +1만 하면 끝 → 계산과 구현 간편 
덧셈/뺄셈 일관성 뺄셈을 덧셈으로 통일  → 코드 및 하드웨어 효율 상승
정렬 시 자연스러운 순서 이진수 비교 시 음수-양수 순서가 올바르게 정렬됨

 

💽 Primitive Data Type에서 2의 보수

타입 크기(비트) 최댓값 최솟값
 byte  8bit 127 -128
 short  16bit 32,767 -32,768
 int  32bit 2,147,483,647 2,147,483,648
 long  64bit 2⁶³-1 -2⁶³

 

🎯 정리 🎯

자바는 모든 정수형 타입에서 음수를 표현할 때 2의 보수를 사용한다.

이로 인해 덧셈/뺄셈 연산이 통합되고, 하드웨어와 호환되며, 코드의 복잡성이 낮아진다!!

'JAVA > JAVA 실행 원리' 카테고리의 다른 글

String  (1) 2025.04.30
Semantic Error와 Syntax Error  (0) 2025.04.23
JVM(자바 가상 머신)  (0) 2025.03.28
컴파일러(Compiler)  (0) 2025.03.28
JAVA  (0) 2025.03.26