HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
👻
개발 기록
/
📑
강의 정리
/
📑
보수
📑

보수

  • 부호 있는 정수(signed integer), 부호 없는 정수(unsigned integer).
    • -, + 를 붙이냐 안붙이냐의 차이.
    • 컴퓨터는 0과 1밖에 모르는데?
    • 8비트 안에서 해결
    • notion image
16비트는 너무 기니까
16비트는 너무 기니까
 
  • 근데 한계가 있음.
    • +0과 -0 실제로 같은 값인데 다른 비트 패턴을 가짐.
    • notion image
    • 음수와 양수를 더했을 때 오류가 남.
    • notion image
  • 그래서 등장한 방법! 보수(complement)임.
 
  • 보수란?
    • 보충하는 수.
    • 숫자의 합이 일정 수가 될 수 있게 도와주는 수.
  • N진법에는 두 가지 보수가 있음.
    • N의 보수
    • N - 1의 보수
    • ex) 10 진법의 보수는 10의 보수, 9의 보수가 있음.
  • 10의 보수
    • 10이 되기 위해 필요한 수.
    • 2의 10의 보수는 8처럼 10^n이 되기 위해 필요한 수를 말함.
      • n은 보수를 구하려는 수의 자릿수에 따라 달라짐.
 

사실은 이미 쓰고 있었을 수도..!?

notion image
 
  • 9의 보수
    • 9가 되기 위해 필요한 수.
    • 483의 9의 보수는 516 (999 - 483)
 
  • 10의 보수와 9의 보수의 관계
    • 10의 보수를 구하는 가장 쉬운 방법.
    • 9의 보수를 구한 다음 1을 더하는 것. 특히 9는 큰 수이기에 이 특성을 이용하면 계산이 더 빠름.
    • ex) 5483095497의 10의 보수는?
    • notion image
 
  • 보수와 뺄셈
notion image
  • 폰 노이만이 보수를 이용하여 오버플로우를 이용한 뺄셈할 것을 제안.
    • 일반적인 뺄셈과 동일한 결과
      일반적인 뺄셈과 동일한 결과
      음수를 보수로 표현할 수 있음.
      음수를 보수로 표현할 수 있음.
 
⇒ 보수를 이용하면 음수 표현과 뺄셈이 가능해지기에 컴퓨터 설계시 2진법의 두 보수 중 하나를 적용함.
 

방법 1 : 1의 보수

  • 60~80년대 컴퓨터들이 사용한 방법 (현재도 일부 사용).
  • n 자릿수를 가진 2진수 N과 N의 1의 보수의 합은 2^n - 1.
  • 2^n - 1은 모든 게 1로 구성됨.
    • notion image
    • ex) 1011(2) + 1011(2)의 1의 보수 = 1111(2)
  • 구하는 방법
    • n 자릿수를 가진 이진수 N의 1의 보수는 2^n - 1 - N
    • notion image
      💡
      여기서 한 가지 팁! i 가 0과 1이라는 가정하에(i + 1) % 2 와 1 - i의 결과가 같음.
  • 표현 범위
    • 수의 범위 : 2^(n-1) - 1
      수의 범위 : 2^(n-1) - 1
       
  • 1의 보수와 장점과 한계
    • 0에 대한 처리가 두 가지임.
    • 최대 자리를 넘어 받아올림이 발생한 경우에 +1을 해줘야 함.
      • notion image
 

방법 2 : 2의 보수

  • 현재 부호 있는 정수를 표현하는 가장 흔한 방법.
  • n 자릿수를 가진 이진수 N의 2의 보수는 2^n - N
    • notion image
  • 더 쉬운 방법.
    • 10의 보수와 9의 보수의 관계처럼 1의 보수를 구한 다음 1을 더함.
      • notion image
 
- 음수를 표현할 수 있는 범위가 양수보다 하나 더 큼. 0을 재활용하기 때문.
- 마이너스의 절댓값이 높아질수록 0이 더 많아짐.
- 음수를 표현할 수 있는 범위가 양수보다 하나 더 큼. 0을 재활용하기 때문. - 마이너스의 절댓값이 높아질수록 0이 더 많아짐.
 
  • 2의 보수의 장점
    • 0 표기가 하나고, 음수 처리 시 +1을 할 필요도 없음.
    • 오늘 날 음수를 표현할 때 가장 많이 쓰는 방법.
    • 많은 프로그래밍 언어 및 CPU가 자체적으로 지원.
notion image
 
  • 부호있는 정수의 덧셈, 뺄셈
    • 잘 덧셈이 되지만 부호를 표현하는 자릿수를 쓸 경우 오버플로우 발생.
      • notion image
    • 이 때 다시 0으로 돌아가는 게 아닌 가장 작은 값으로 돌아간다는 점에 유의하자.
      • notion image
    • 한 가지 추가로 최솟값보다 작은 값이 나와야 할 경우지만 오히려 큰 값이 나와버리는 경우 언더플로가 발생했다고 함.
 
  • 8비트 정수를 예로 들었는데 실제 컴퓨터 언어에는 몇 비트 정수를 쓸까?
    • notion image
    • 8비트 단위로 구분함.
    • 각 자료형마다 singed, unsigned 특성이 존재. 단 프로그래밍 언어에 따라 unsigned 정수가 존재하지 않을 수 있음. ex) Java
    • 가장 많이 쓰는 32비트임. 32비트, 64비트 CPU가 있는 이유와 마찬가지.
      • 지금은 컴퓨터가 64비트가 되었지만 아직도 32비트를 기본형으로 쓰는 경우가 많음.
  • 즉, 정수면 보통 32비트임.
 
  • 곱셈도 해보자.
    • 우선 10진수에서 가장 곱하기 쉬운 형태가 (숫자) x 10^n인 것처럼 2진수도 곱하는 2^n 만큼 자릿수를 옮겨주면 됨.
      • notion image
 
  • 보편적인 2진수의 곱셈
    • notion image
    • 10진수랑 똑같이 음수가 하나라면 양수로 바꾸고 계산 후, 음수로 변환, 음수가 두 개라면 양수로 바꾸고 계산.
  • 2진수의 나눗셈
    • notion image
Created
Mar 7, 2023 03:16 PM
Type
공학수학
Mento
포프
Created By