컴퓨터는 0과 1로 이루어져 있는 비트라는 개념을 사용해 모든 것들 표현합니다.
이러한 컴퓨터는 n개의 비트를 이용해 2^n개의 정수를 표현할 수 있습니다. 정수에는 양의 정수와 음의 정수가 있는데 컴퓨터는 음수 또한 비트로 표현하는데 이때 사용하는 것이 보수라는 개념입니다. 보수는 컴퓨터에서 음의 정수를 표현하기 위해서 고안됐습니다.
보수란? - 두 수의 합이 진법의 밑수(n)가 되게 하는 수를 말합니다.
예를 들어 2진수 1110의 1의 보수는 0001이고,
2진수 0110의 1의 보수는 1001입니다.
컴퓨터 내부에서 사칙연산을 할 때 뺄셈은 덧셈으로 형식을 변환하여 계산합니다.
바로 보수를 이용해서 a - b를 계산할 때 b의 보수(-b)를 구한 다음 a + (-b)로 계산합니다.
1의 보수 - 각 자릿수의 값이 모두 1인 수에서 주어진 2진수를 뺀다.
2진수 0001의 1의 보수는 1110이다.
2진수 1111의 1의 보수는 0000이다.
2의 보수 - 1의 보수에서 1을 더한 것입니다.
2진수 0001의 1의 보수는 1110이고, 여기서 1을 더하면 1111(2의 보수)이다.
2진수 1111의 1의 보수는 0000이고, 여기서 1을 더하면 0001(2의 보수)이다.
1의 보수를 이용한 뺄셈 : 빼는 수의 1의 보수를 구한 다음 더합니다. 덧셈한 결과가 최상위 비트에서 자리올림이 생겼다면 최하위 비트에 1을 더하고, 자리올림이 생기지 않았다면 연산 결과에 대해 1의 보수를 구한 후 ' - ' 부호를 붙입니다.
밑에 계산식에서 2진수 옆에 괄호 안에 숫자는 10진수이다.
2진수 ) 100(4) - 011(3) > 100 + 100 = 1000 / 최상위 비트에서 자리올림이 생겼기 때문에 최상위 비트는 지우고 최하위 비트에 1을 더한 값이 답이다. 즉, 답은 001(1)
2진수 ) 100(4) - 111(7) > 100 + 000 = 100 / 자리올림이 생기지 않았기 때문에 100에 대해서 1의 보수를 구한 후 - 부호를 붙인다. 즉, 답은 011(-3)
2의 보수를 이용한 뺄셈 : 1의 보수와 크게 다르지 않다. 빼는 수의 2의 보수를 구한 다음 더합니다. 덧셈한 결과가 최상위 비트에서 자리올림이 생겼다면 최상위 비트를 제외한 나머지 부분이 결과값이고, 자리올림이 생기지 않았다면 결과값에 2의 보수를 구한 후 ' - ' 부호를 붙입니다.
밑에 계산식에서 2진수 옆에 괄호안에 숫자는 10진수이다.
2진수 ) 100(4) - 011(3) > 100 + 101 = 1001 / 최상위 비트에서 자리올림이 생겼기 때문에 최상위 비트는 지우고 나머지 값이 답이다. 즉, 답은 001(1)
2진수 ) 100(4) - 111(7) > 100 + 001 = 101 / 자리올림이 생기지 않았기 때문에 101에 대해서 2의 보수를 구한 후 - 부호를 붙인다. 즉, 답은 011(-3)
2의 보수는 1의 보수와 달리 음의 정수를 하나 더 표현할 수 있어서 효율적입니다. 그래서 대부분의 컴퓨터에서는 2의 보수 방식을 사용합니다.
'공부 창고 > 여러지식, 용어정리' 카테고리의 다른 글
CPU, GPU 차이 간략하게 정리 (0) | 2022.07.20 |
---|---|
다시 봐야할 강의 정리 (0) | 2022.07.07 |
C++ Visual Studio 유용한 단축키 (0) | 2022.06.08 |
아스키코드표 (0) | 2022.05.12 |
2진수를 16진수로 쉽게 표현하기 (0) | 2022.05.11 |