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

C++에서 부호 없는 정수에 대한 나눗셈 알고리즘 복원

<시간/>

나누기 알고리즘을 사용하여 부호 없는 정수 나누기에 대해 논의합니다. 일부 분할 알고리즘은 종이에 적용되고 다른 알고리즘은 디지털 회로에 구현됩니다. 분할 알고리즘에는 느린 분할 알고리즘과 빠른 분할 알고리즘의 두 가지 유형이 있습니다. 저속분할 알고리즘에는 복원, 미수행 복원, SRT, 미복구 알고리즘이 있습니다.

이 자습서에서는 0 <제수 <피제수

라고 가정하고 복원 알고리즘에 대해 설명합니다.

해결책을 찾기 위한 접근 방식

여기서는 레지스터 Q를 사용하여 몫을 저장하고 레지스터 A를 사용하여 나머지를 저장하고 M을 사용하여 제수를 저장합니다. A의 초기값을 0으로 유지하고 그 값을 되돌리기 때문에 나눗셈을 복원하는 방식입니다.

  • 값으로 레지스터 초기화,

    • Q =배당금,

    • A =0,

    • M =제수,

    • N =피제수 비트 수.

  • 왼쪽 시프트 AQ는 레지스터 A와 Q를 단일 단위로 취하는 것을 의미합니다.

  • A에서 M을 빼고 A에 저장합니다.

  • A의 최상위 비트 확인:

    • 0이면 최하위 비트를 1로 설정합니다.

    • 그렇지 않으면 최하위 비트를 0으로 설정합니다.

  • A의 값을 복원하고 카운터 N의 값을 감소시킵니다.

  • N =0이면 루프를 끊습니다. 그렇지 않으면 2단계로 이동합니다.

  • 몫은 레지스터 Q에 저장됩니다.

흐름도

C++에서 부호 없는 정수에 대한 나눗셈 알고리즘 복원

예시

위 접근 방식에 대한 C++ 코드

#include <iostream>
using namespace std;
int main(){
   // initializing all the variables with Dividend = 9, Divisor = 2.
   int Q = 8,q=1,M=3;
   short N = 4;
   int A = Q;
   M <<= N;
   // loop for division by bit operation.
   for(int i=N-1; i>=0; i--) {
      A = (A << 1)- M;
      // checking MSB of A.
      if(A < 0) {
         q &= ~(1 << i);  // set i-th bit to 0
         A = A + M;
      } else {
         q |= 1 << i;     // set i-th bit to 1
      }
   }
   cout << "Quotient: "<< q;
   return 0;
}

출력

Quotient: 2

결론

이 자습서에서는 부호 없는 정수에 대한 나누기 알고리즘 복원에 대해 설명했습니다. 우리는 순서도를 사용하고 비트 연산을 적용하여 이 문제를 해결하는 간단한 접근 방식에 대해 논의했습니다. 우리는 또한 C, Java, Python 등과 같은 프로그래밍 언어로 할 수 있는 이 문제에 대한 C++ 프로그램에 대해 논의했습니다. 이 튜토리얼이 도움이 되기를 바랍니다.