Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

이진수 시스템 - C/C++의 산술 덧셈 오버플로?

<시간/>

2의 보수 번호 시스템은 컴퓨터 아키텍처에서 널리 구현됩니다.

N-bit 2의 보수 수 시스템은 -2n-1에서 2n-1- 1까지의 수를 나타낼 수 있습니다.

4 비트는 ( -8 에서 7 ) 사이의 숫자를 나타낼 수 있습니다.

5비트는 2의 보수 시스템에서 (-16에서 15까지) 숫자를 나타낼 수 있습니다.

2개의 N비트 2의 보수가 추가되고 답이 N비트 그룹에 맞지 않을 때 덧셈과 관련하여 오버플로가 발생합니다.

컴퓨터에는 N-비트 고정 레지스터가 포함되어 있습니다. 2개의 N-Bit Number를 더한 결과는 최대 N+1 Bit 수가 됩니다.

캐리 플래그는 추가 비트를 저장합니다. 하지만 캐리가 항상 오버플로를 지정하는 것은 아닙니다.

오버플로 감지

오버플로가 발생하는 경우 -

  • 두 개의 음수를 더한 결과는 양수 또는

  • 두 개의 음수를 더한 결과는 음수입니다.

따라서 두 피연산자의 MSB(Most Significant Bit) 및 결과를 확인하여 오버플로를 감지할 수 있습니다. 그러나 3비트 비교기 오버플로를 구현하는 대신 MSB에서 Carry-in 및 Carry-Out을 확인하는 것만으로 2 Bit Comparator를 구현하여 감지할 수도 있습니다. 2의 보수 수에 N-Bit 추가를 고려합니다.

이진수 시스템 - C/C++의 산술 덧셈 오버플로?


캐리인이 캐리아웃과 같지 않을 때 오버플로가 발생합니다. 오버플로에 대한 위의 표현은 아래 분석에서 논의할 수 있습니다.

이진수 시스템 - C/C++의 산술 덧셈 오버플로?


첫 번째 그림의 경우 두 숫자의 MSB는 양수임을 나타내는 0입니다. 여기에서 Carry-in이 1이면 결과의 MSB를 1로 표시하여 결과가 음수(Overflow)이고 Carry-out이 0임을 나타냅니다. Carry-in은 Carry-out과 같지 않으므로 overflow입니다.

두 번째 그림의 경우 두 숫자의 MSB는 1이며 음수임을 나타냅니다. 여기에서 Carry-in이 0이면 결과 MSB가 0으로 결과가 양수(Overflow)이고 Carry-out이 1임을 나타냅니다. Carry-in은 Carry-out과 같지 않으므로 overflow입니다.

따라서 MSB의 Carry-in 및 Carry-out은 Overflow를 감지하기에 충분합니다.

이진수 시스템 - C/C++의 산술 덧셈 오버플로?


오버플로 감지를 위해 XOR Gate 위를 구현할 수 있습니다.