CHANGEL
SOLID BASICS
CHANGEL

공지사항

  • DEV.CHANGEL PROFILE
  • SOLID BASIC (289)
    • 공부 STUDY (115)
      • JAVA (57)
      • C | C++ (34)
      • CS (11)
      • MySQL (2)
      • ALGORITHM (1)
      • HTML (2)
      • CSS (2)
      • JS (2)
      • CODING (0)
      • MINI PROJECT (3)
    • 스프링 SPRING (21)
      • [SPRING] 김영한 스프링 입문 (11)
      • [SPRING] 남궁성 스프링의 정석 (1)
      • [SPRING] 스프링 핵심원리 (9)
    • 전공 수업 CS (65)
      • Computer Network (13)
      • algorithms (21)
      • Computer Architecture (7)
      • Software Engineering (4)
      • Data Structure (2)
      • DataBase (1)
      • Digital Engineering (14)
      • Discrete Mathematics (3)
      • Introduction to programming (0)
      • Mobile Software (0)
      • Intelligence and Informatio.. (0)
    • 대외활동 (35)
      • 신한은행 대학생 홍보대사 34기 (8)
      • SKT T프렌즈 5기 (13)
      • SK DEVOTION YOUNG 1기 (9)
      • 성균관 대학교 공학교육혁신센터 수강 (3)
      • 수상 기록 (1)
    • 솝트 33기 안드로이드 (7)
      • [솝트 33기] 회고록 (0)
      • [솝트 33기] 안드로이드 왕초보 스터디 (2)
      • [솝트 33기] 코틀린 스터디 (0)
      • [솝트 33기] Git을 털어보자 깃털 스터디 (4)
    • 멋쟁이사자처럼 11기 (6)
      • 멋사 회고록 (4)
      • 백엔드 세션 (1)
      • 기획 세션 (1)
      • 연합해커톤 운영단 (기획팀) (0)
    • 백준 BAEKJOON (16)
    • 독서 BOOK (10)
    • 자격증 CERTIFICATE (1)
    • 준비 서류 및 회고록 MEMOIR (7)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기

최근 댓글

인기 글

CHANGEL

SOLID BASICS

전공 수업 CS/Discrete Mathematics

[이산수학] 1의 보수와 2의 보수 그리고 계산

2023. 4. 13. 10:49

작년 컴퓨터 구조 시간부터 디지털 공학...그리고 이산수학까지

질리도록 배워온 1의 보수와 2의 보수 개념을 다시 한 번 정리하려고 한다.

 

● 정수 표현

 

  컴퓨터는 N개의 비트를 이용해 2^N개의 정수만 표현할 수 있습니다. 이러한 방식을 이용해서 수를 표현해야 하기 때문에 쉽지 않습니다. 또한 정수는 음의 정수와 양의 정수로 나누어지기 때문에 +, - 기호 또한 전부 비트로 표현을 해주어야 합니다. 하지만 정확히 어떠한 방식으로 이러한 정수를 표현할 수 있을까요? 그것을 알기 위해서는 보수의 개념을 이해하면 됩니다.

​

  보수란, '두 수의 합이 진법의 밑수(N)가 되게 하는 수'를 말합니다. 예를 들어 10진수 4의 10의 보수는 6이고, 10진수 2의 10의 보수는 8입니다. 보수는 컴퓨터에서 음의 정수를 표현하기 위해서 고안되었습니다. 컴퓨터 내부에서는 사칙연산을 할 때 덧셈을 담당하는 가산기(Adder)만 이용하기 때문에 뺄셈은 덧셈으로 형식을 변환하여 계산해야 합니다. 즉 컴퓨터 내부에서는 A - B를 계산할 때 B의 보수(-B)를 구한 다음 A + (-B)로 계산하는 것입니다.

 

▶ 1의 보수 : 각 자릿수의 값이 모두 1인 수에서 주어진 2진수를 빼면 1의 보수를 얻을 수 있습니다.

​

  예시 ) 2진수 1010의 1의 보수는 0101입니다.

​

▶ 2의 보수 : 1의 보수에 1을 더한 값과 같습니다.​

​

  예시 ) 2진수 1010에 대한 2의 보수를 구하려면 2진수 1010에 대한 1의 보수 0101을 구한 다음 1을 더해 0110을 얻습니다.

​

​▶ 덧셈 : 기본적으로 2진수의 덧셈은 10진수의 덧셈과 계산하는 방식이 같습니다.

​

▶ 뺄셈 : 컴퓨터 내부에서는 덧셈만 가능하기 때문에 뺄셈은 보수를 이용해 덧셈으로 바꿉니다. 

​

  예시 ) 뺄셈 A - B는 B의 보수를 구한 다음 덧셈 A + (B의 보수)로 바꾸어 계산합니다.

​

 - 1의 보수 뺄셈 : 1의 보수를 이용한 뺄셈은 빼는 수의 1의 보수를 구한 다음 더합니다. 덧셈한 결과가 최상위 비트에서 자리올림이 생겼다면 최하위 비트에 1을 더하고, 자리올림이 생기지 않았다면 연산 결과에 대해 1의 보수를 구한 후 - 부호를 붙입니다.

​

  예시 ) ​111(2) - 110(2) = 111(2) + 001(2) = 1000(2)에서 최상위 비트를 지우고 1을 더하므로 답은 1(2)입니다.

  예시 ) 100(2) - 110(2) = ​100(2) + 001(2) = 101(2)에서 다시 1의 보수를 취하므로 답은 10(2)입니다.

​

​ - 2의 보수 뺼셈 : 2의 보수를 이용한 뺄셈은 빼는 수의 2의 보수를 구한 다음 더합니다. 덧셈한 결과가 최상위 비트에서 자리 올림이 생겼다면 자리올림을 제외한 나머지 부분이 연산 결과이고, 자리 올림이 생기지 않았다면 연산 결과의 2의 보수를 구한 후 - 부호를 붙입니다.

​

  예시 ) 111(2) - 110(2) = 111(2) + 010(2) = 1001(2)에서 최상위 비트를 지우므로 답은 1(2)입니다.

  예시 ) 1​00(2) - 110(2) = 100(2) + 010(2) = 110(2)에서 답은 010(2)입니다.

​

▶ 곱셈 : 2진수의 곱셈을 하려면 부분 곱(Partial Product)을 이용합니다.

​

  예시 ) 110011(2) X 110(2)은 다음과 같이 계산됩니다.

​

            110011

    X           110

        -----------

​           000000

          110011

        110011

        -----------

      100110010

​

  결과적으로 답은 100110010(2)입니다.

​

▶ 나눗셈 : 2진수의 나눗셈을 뺄셈으로 구현합니다.

​

  예시 ) 100110(2) / 110(2)은 다음과 같이 계산됩니다.

​                   110

​     110  ) 100110

              -110

               --------

                 111

                -110

               --------

                     10​

​

  결과적으로 몫은 110(2)이고 나머지는 10(2)입니다.

​

▶ 고정 소수점 표현 : 고정 소수점은 소수점이 고정된 위치에 있다는 의미입니다.​ 소수점이 왼쪽에 있다고 가정하면 소수를 나타내고 오른쪽에 있다고 가정하면 정수를 나타냅니다. 고정 소수점 방식은 용량이 제한적인 컴퓨터에서 매우 큰 수나 작은 수를 표현하기에는 한계가 있어서 정수를 표현할 때 주로 사용되고 있습니다.

​

  부호(S)에 양의 정수는 0을 저장하고 음의 정수는 1을 저장합니다. 크기에는 정수 값을 2진수로 저장하면 됩니다.

​  고정 소수점 표현에는 음의 정수를 부호화 절댓값 방식, 1의 보수 방식, 2의 보수 방식을 사용하여 나타냅니다.

​

 - 부호화 절댓값 방식 : 부호 비트 1과 2진수의 절댓값으로 나타냅니다.

 - 1의 보수 방식 : 부호 비트 1과 2진수의 절댓값에 대한 1의 보수로 나타냅니다.

 - 2의 보수 방식 : 부호 비트 1과 2진수의 절댓값에 대한 2의 보수로 나타냅니다.

​

  양의 정수를 표현할 때는 3가지 방식 모두가 부호 비트에 0을 넣는 방식을 채택하지만, 음의 정수를 표현할 때는 제각각인 것입니다.

​

  예시) 8비트로 양의 정수 +13과 음의 정수 -13을 나타내면 아래와 같습니다.

​

표현 방식 +13 -13
부호화 절댓값 0 0001101 1 0001101
1의 보수 0 0001101 1 1110010
2의 보수 0 0001101 1 1110011

​

  또한 부호화 절댓값 방식과 절댓값 방식이 N비트로 표현할 수 있는 수의 범위는 -(2^N-1 - 1) ~ (2^N-1 - 1)입니다. 반면에 2의 보수 방식은 +0과 -0이 존재하는 부호화 절댓값 방식이나 1의 보수 방식과 달리 -0이 존재하지 않습니다. 즉 음의 정수를 하나 더 표현할 수 있어서 더욱 효율적이라고 할 수 있습니다. 따라서 2의 보수 방식으로 표현할 수 있는 수의 범위는 -2^N-1 ~ (2^N-1 - 1)입니다. 대부분의 컴퓨터에서는 2의 보수 방식을 사용합니다.

​​

10진수 부호화 절댓값 1의 보수 2의 보수
-4 - - 100
-3 111 100 101
-2 110 101 110
-1 101 110 111
-0 100 111 -
+0 000 000 000
+1 001 001 001
+2 010 010 010
+3 011 011 011
저작자표시 (새창열림)

'전공 수업 CS > Discrete Mathematics' 카테고리의 다른 글

[이산수학] 명제 논리 | 진리표 | 추론에서 헷갈리기 쉬운 내용  (0) 2023.04.12
[이산수학] 논리와 명제 LOGIC & PROPOSITION  (0) 2023.04.11
    '전공 수업 CS/Discrete Mathematics' 카테고리의 다른 글
    • [이산수학] 명제 논리 | 진리표 | 추론에서 헷갈리기 쉬운 내용
    • [이산수학] 논리와 명제 LOGIC & PROPOSITION
    CHANGEL
    CHANGEL
    NOT GIVING UP | SOLID BASICS

    티스토리툴바