원본 코드, 역 코드, 보완 코드 연산

컴퓨터의 이진 원리로 인해 컴퓨터는 0과 1로 구성된 이진수만 인식할 수 있습니다. 컴퓨터에 어떤 명령을 내리더라도 결국 일련의 0 또는 1 조합으로 변환됩니다. 따라서 이들 이진수 사이의 연산 역시 일련의 규칙과 표현을 통해 수행되어야 하며, 이러한 연산식에는 원부호, 역부호, 보수부호가 포함되며, 다음은 논리적 순서로 설명한다.

1. 원본 코드 연산

처음에는 이진수 사이의 연산이 필요했습니다. 설계된 계산 규칙은 원래 코드를 사용하여 계산되었습니다. 원래 코드의 표현은 다음 표와 같이 가장 높은 비트는 숫자의 부호, 즉 양수와 음수를 나타내고 나머지 비트는 숫자의 절대값의 기계 번호(이진수)를 나타냅니다.

소수 바이너리 원래 코드
1 1 00000001
2 10 00000010
11 00000011
-1 10000001
-2 10000010
-삼 10000011

1+2는 원래 코드를 사용하여 프로세스를 계산합니다. 00000001+00000010=00000011, 결과는 3, 맞습니다.

그런데 이때 음수의 연산을 하게 되면 다음과 같은 문제가 발생하게 됩니다.

3-1(숫자를 빼는 것은 반대 숫자를 더하는 것과 같습니다. 즉, 3+(-1))은 원래 코드로 계산됩니다.

00000011+10000001=10000100, 결과는 -4, 분명히 틀렸습니다.

따라서 원래 코드를 사용하여 음수 연산을 계산할 때 오류가 발생하므로 이를 해결하기 위해 역 코드 표현을 제안합니다.

2. 역코드 연산

1의 보수 표현: 양수의 1의 보수는 자신이고 음수의 1의 보수의 최상위 비트는 변경되지 않고 나머지 비트는 다음 표와 같이 반전됩니다.

소수 바이너리 원래 코드 역코드
1 1 00000001 00000001
2 10 00000010 00000010
11 00000011 00000011
-1 10000001 11111110
-2 10000010 11111101
-삼 10000011 11111100

보수의 모양과 표현은 음수와 관련된 연산을 해결합니다.

양수의 역 코드는 원래 코드와 같기 때문에 양수와 양수 사이의 연산은 영향을 받지 않으며 음수가 포함된 경우에도 올바른 연산을 수행할 수 있습니다.

2-3: 00000010+11111100=11111110, 역코드가 11111110인 숫자의 원래 코드는 10000001이고 십진수로 변환하면 -1이 됩니다.

1-3: 00000001+11111100=11111101, 역코드가 11111101인 숫자의 원래 코드는 10000010이고, 십진수로 변환하면 2가 맞습니다.

다만, 다음의 경우에는 역부호를 계산에 사용할 수 없다.

2-1 역부호를 이용한 계산 과정: 00000010+11111110=(1) 00000000, 최상위 자리는 오버플로되어 생략되고, 역부호가 00000000인 숫자의 원래 코드는 00000000이므로 0이므로 오류.

3-1 역 부호 계산 과정: 00000011+11111110=(1) 00000001, 최상위 비트 오버플로우는 생략, 역 부호가 00000001인 숫자의 원래 부호는 00000001, 즉 1, 오류.

1-1 역부호로 계산하는 과정: 00000001+11111110=11111111, 역부호가 11111111인 숫자의 원래 부호는 10000000이고 결과는 -0이다.

이를 방지하기 위해 2의 보수가 제안됩니다.

3의 보수 연산

보수의 표현: 양수의 보수는 자신이고, 음수의 보수는 그 역수에 1을 더한 것입니다.

소수 바이너리 원래 코드 역코드 보어
1 1 00000001 00000001 00000001
2 10 00000010 00000010 00000010
11 00000011 00000011 00000011
-1 10000001 11111110 11111111
-2 10000010 11111101 11111110
-삼 10000011 11111100 11111101

보완 코드를 사용한 1+1 계산 프로세스: 00000001+00000001=00000010, 결과 2, 올바른

1-2 보수 코드를 사용한 계산 프로세스: 00000001+11111110=11111111, 결과는 -1, 맞습니다.

그런 다음 2-1 계산으로 이동합니다.

2-1 보수 연산: 00000010+11111111=(1)00000001, 보수가 00000001(최상위 비트 오버플로)인 숫자의 원래 코드는 그 자체, 즉 십진수로 1인 00000001입니다.

3-1 역 부호 계산 과정: 00000011+11111111=(1)00000010, 보수 부호가 00000010(최고 자릿수 초과)인 숫자의 원래 부호는 그 자체, 즉 십진수로 2인 00000010이다.

1-1 보수 부호를 이용한 계산 과정: 00000001+11111111=00000000, 보수 부호가 00000000(가장 높은 자릿수가 넘침)인 숫자의 비는 그 자체, 즉 십진법으로 0인 00000000이다.

주목:

원래의 코드를 사용한 결과도 원래의 코드이고, 역부호를 사용한 결과도 역부호이며, 보수부호를 사용한 결과도 보수부호이다. 컴퓨터는 계산을 위해 보수 코드를 사용하며 입력한 데이터는 컴퓨터 자체에서 해당 보수 코드로 변환됩니다.



 

추천

출처blog.csdn.net/m0_51660523/article/details/121998628