어떻게 컴퓨터 연산을 구현하는 방법?

컴퓨터는 일반 연산은 CPU를 달성하기 위해 ALU 내부에 CPU를 의미한다

위키 설명

  산술 논리 유닛 ( 영어 : 산술 논리 유닛은 ALU가 )는 IS 중앙 프로세서 실행 유닛 모두 중앙 프로세서 코어 성분의 AND 게이트OR 게이트 산술 논리 장치의 주요 기능은 이진 에서 산술 연산 (정수 나눗셈을 포함하지 않음)에 의해 감산 등. 기본적으로 모든 현대 CPU 아키텍처, 바이너리에 보수 표현하는 형태.

여기에 몇 가지 질문이 있습니다 :

  1. 산술 가산기를 사용하지 않고 구현

  2. 빼기를 실현하기 위해 연산을 사용하지 마십시오

  3. 저장 곱셈과 나눗셈 곱셈을 사용하지 않고 구현

당신이 답을 알고 있다면, 필요 Kanla 아래로, 반대로 읽는 계속 없다

  상기 제 가산기

    

코드 구현

INT의 _add (INT의 V1, V2의 INT) { 
  INT nRet = 0; 
  {할 
    nRet는 V1 = V2 ^; 
    V2 = (V1 및 V2) << 1] 
    V1 = nRet; 
  } 동안 (V2); 
  nRet를 반환; 
}

 수동 테스트

  5 + 5 =?

    (101) (101)

XOR (101) 및 (101)

------------------------------------------

      000 (101)

 

    0000 0000

XOR 1010 1010

------------------------------------------

     1010        0000

결과은 다음의 변환 비트 이진 1,010 (2 ^ 0 * 0) + (1 * ^ 2) + (0 * 2 ^ 2) + (1 *이 2 ^ 3) = 10

뺄셈 말했다되었다 예

  덧셈과 뺄셈 같은 이유로, 당신은 보완을 알아야 할 이유에 (Niubi 나는 아무도 반박하지한다고 생각합니다 디자인을 보완)

_bitSub INT (INT A, INT의 B) { 
	B = -b; 
	DO { 
		INT는 nXorResult = A는 B ^; 
		// B는 루프를 종료 판정 수단;. B = (A & B)를 << 1 
		A는 nXorResult = // A는 결과 
	}는 동안 (B)는,	 
	를 반환; 
}

수동 테스트 (원래 게으른되고 싶어, 설명을 계속하지 않습니다 ...)

   1-1 (감수의 부호를 반전하고 가산 동작 모드를 사용하여)

       0001 0001

XOR 1111 및 1111

-------------------------------------

      1110 0001

 

       1110 1110

XOR 0010 및 0010

--------------------------------------

       1100 0010

    

       1100 1100

XOR 0100 및 0100

--------------------------------------

      1,000 0,100

 

       1000 1000

XOR 1000 1000

--------------------------------------

       0000 1000

 

       00000 00000

XOR 만 1 0000

--------------------------------------

      10000 00000

 그것은 너희가 초과 오프 네 비트 컴퓨팅, 직접 컷을 완료, 그래서 결과는 바이너리 0000, 주목해야한다 

  1--1 (감수의 부호를 반전하고 가산 동작 모드를 사용하여)

    0001 0001

XOR 0001 0001
-------------------------------------

    0000 0001  

 

    0000 0000

XOR 0010 0010
-------------------------------------

    0010    0000

결과 : 0010 진수로 바이너리 2  

열기는 올바른 증명

 

먼저 질문을 고려 곱셈을 달성

진수 : 100 * 10 = 초 당신은 대답, 100 * 100을 알아야합니까? 100 * 100 = 10000

주 : 접미사 B는 이진수를 나타낸다

진 : 100B의 *의 100B = 당신이 동일한 것이 얼마나 알고 계십니까? 사실, 여기 진수 동일한 이유이다 100B 100B * = 10000b (이것은 실제로 두 결과가 왼쪽으로 이동 피승수 쓰루 = 100 100 2 << 00 )

 

INT _mul INT (V1, V2의 부호 INT) { 
    INT nRet = 0; 
    INT nLeftMove = 0; 
    {할 
        경우 (V2 & 1) { 
            nRet = V1 + << nLeftMove; 
        } 
        V2 = V2 >> 1; 
        nLeftMove ++; 
    } 
    동안 (V2); 
    nRet를 반환; 
}

  * 5 * 2 = 101B 10B

먼저 1 개 분석 0 B (1)은 조건이 만족되지 이동하지 피승수이고, 0이 아닌

둘째 분석 0B 1 피승수 이동 조건이 만족 된, 1, 1B << 101B = 1010B

셋째, 승수는 종료 이상 판단하고있다

 

추천

출처www.cnblogs.com/binaryAnt/p/11104901.html