컴퓨터가 수를 표현하는 방법

KIM SOO MIN·2023년 11월 27일

learning

목록 보기
8/16

💡 컴퓨터가 0과 1로 이루어져있다는 것을 알고는 있었으나 수포자에다가 컴공과도 아니어서 부끄럽지만 2진수가 아직도 조금 어려웠었다. 게다가 2진수로 -를 표헌하는 법?은 생각도 못해봐서 정말 구몬수학을 다시 풀어야하나….(먼 산..)
컴퓨터의 데이터 단위

일단 컴퓨터의 데이터 단위부터 알아보도록 하자
1Bit0 or 1
1Byte 8bit
1KB 1,024Byte
1MB 1,024KB
1GB 1,024MB
1TB 1,024GB
컴퓨터에서 의미있는 정보 하나를 표현하는 최소단위가 Byte부터라고 한다. 그래서 구글링해본 예제에서 너무나 당연시리 00000000로 예제를 보여주어서 왜인지 궁금증이 계속 생겼었다. 알고보니 그랬던 것…
기본 자료형의 종류

논리형boolean1Byte
문자형 char 2Byte
정수형 byte 1Byte
정수형 short 2Byte
정수형 int 4Byte
정수형 long 8Byte
실수형 float 4Byte
실수형 double 8Byte
다른 블로그에서 int형은 ‘네 개’가 필요하다고 써놓고 예제는 00000000로 해두어서 헷갈림이 많았다.
위의 자료형의 Byte를 보면 int 형의 그 ‘네 개’는 Byte의 네 개란 뜻으로 Bit로 변환하면 32개의 Bit가 필요하다.
정수 표현 방식

부호비트방식

최상위 비트(Most Significant Bit)를 부호 표기를 위해 남겨두는 방식이다.
예를 들어 8비트의 자료의 경우에는
양수00000001
부호 64 32 16 8 4 2 1
음수10000001
부호 64 32 16 8 4 2 1
이렇게 부호 표기로 양수와 음수를 표기한다.
하지만 이는 +0과 -0이라고 0이 두 개 존재하는 문제가 있고, 양수와 음수간의 연산이 어렵다는 단점이 있어 실수(float, double)방식의 표현에만 쓰인다.
1의 보수

1의 보수란 어떤 2진수의 각 자리수의 값이 1인 수와 빼면 1의 보수를 얻을 수 있다.
실질적인 데이터 값은 8비트 중에 7비트만 사용한다.
예를들어
00000011

  • 1 0 0 0 0 0 1 1
    = 0 0 0 0 0 0 0 0
    뺄셈을 하면 위의 결과가 나온다.
    이의 경우에도 +0과 -0가 두 개 존재한다.
    1의 보수 뺄셈

💡 휴.. 이해하느라 정말 힘들었다.
빼는 수의 1의 보수를 구한다음 더합니다.
덧셈결과에 자리올림이 생겼다면 최하위 비트에 1을 더하고 자리올림된 것은 제외합니다.
덧셈결과에 자리올림이 생기지 않았다면 연산 결과에 대해 1의 보수를 구한 후 -부호를 붙입니다.
예시 1
2진수 1101 - 1001을 빼보려고 한다.
110113

  • 1 0 0 1 9
    1001의 1의 보수를 구하고 더한다.
    110113
  • 0 1 1 0 6
    = 1 0 0 1 1 19
    최상위 비트 1을 제외하고 최하위 비트에 1을 더한다.
    01004
    예시 2
    2진수 0101 - 1001을 빼보려고 한다.
    01015
  • 1 0 0 1 9
    1001의 1의 보수를 구하고 더한다.
    01015
  • 0 1 1 0 6
    = 1 0 1 1 11
    연산결과에 1의 보수를 구한다.
    01004
    그리고 -를 붙인다.
    -0100-4
    2의 보수

2의 보수는 1의 보수에 1을 더한 값과 같다.
2의 보수를 구하기 위해서는 아래와 같이
00000011
에서 1의 보수를 구한다.
10000011
그 뒤에 1을 더하면
10000100
이 된다.
후에 다시 뺄셈을 해보면
00000011

  • 1 0 0 0 0 1 0 0
    = 0 0 0 0 0 0 0 0
    으로 올림수가 발생하면 무시하고 0으로 표현한다.
    2의 보수 뺄셈

빼는 수의 2의 보수를 구하고 더한다.
최상위 비트 자리올림이 생겼다면 자리올림을 제외한 나머지 부분이 연산결과이다.
최상위 비트 자리올림이 발생되지 않았다면 연산 결과의 2의 보수를 구한 후 -부호를 붙인다.
예시 1
2진수 1101 - 1001을 빼보려고 한다.
110113

  • 1 0 0 1 9
    1001에 2의 보수 0111를 구한 뒤 더한다.
    110113
  • 0 1 1 1 7
    = 1 0 1 0 0 20
    최상위 비트 1을 제외한다.
    01004
    예시 2
    2진수 0101 - 1001을 빼보려고 한다.
    01015
  • 1 0 0 1 9
    1001의 2의 보수 0111를 구하고 더한다.
    01015
  • 0 1 1 1 7
    = 1 1 0 0 12
    연산결과에 2의 보수를 구한다. (1의보수 + 1)
    00113
    0 1 0 0 4
    그리고 -를 붙인다.
    -0100-4
profile
3년차 풀스택 엔지니어입니다.

0개의 댓글