コンピュータ演算を実装する方法?

コンピュータは、汎用コンピューティングは、CPUを達成するためにALU内部のCPUを意味しています

ウィキ説明

  算術論理ユニット英語:算術論理ユニット、ALUが)である中央プロセッサ実行ユニット、全て中央処理装置のコアコンポーネントのANDゲートORゲートの演算装置、主な機能は、バイナリ算術演算、(整数除算を含まない)の減算などによって。基本的に、すべての近代的なCPUアーキテクチャ、バイナリである補数表現する形式。

ここではいくつかの質問があります:

  算術加算器を使用することなく実現1

  2.減算を実現するために算術演算を使用しないでください。

  3.保存乗算と除算は、乗算を使用せずに実装しました

あなたは答えを知っている場合は、必要Kanlaダウンは逆に、ありません続きを読みます

  前記第一の加算器

    

コードの実装

{(INT V1、V2 INT)INT _ADD 
  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 * 2 1)+(^ 2 * 2 0)+(^ 3 * 2 1)= 10 +(* 0 ^ 0 2)1010の変換ビットバイナリ

減算言ったイェ

  あなたは補数を知っている必要があります理由として加算と減算同じ理由で、(私は誰も反論しないべきだと思うデザインNiubiを補完)

_bitSub INT(INT A、int型B){ 
	B = -b; 
	{行う
		INT nXorResult = A ^ Bを、
		B =(A&B)<< 1; // Bは、ループ手段終了と判定され
		= nXorResultを; // aは結果
	}一方、(B)は、	 
	返します; 
}

手動テスト(本来は怠け者になりたかった、実証していきません......)

   1-1 (減数の符号を反転した後、さらに動作モードを使用して)

       0001 0001

XOR 1111と1111

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

      1110 0001

 

       1110 1110

XOR 0010と0010

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

       1100 0010

    

       1100 1100

XOR 0100と0100

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

      1000 0100

 

       1000 1000

XOR 1000および1000年

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

       0000 1000

 

       00000 00000

XOR 10000と1 0000

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

      10000 00000

 それはあなたがたが過剰オフ4ビット・コンピューティング、ダイレクトカットを行っているので、結果はバイナリ0000で、留意すべきです 

  1-1 (減数の符号を反転した後、さらに動作モードを使用して)

    0001 0001

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

    0000 0001  

 

    0000 0000

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

    0010    0000

結果:0010 2進数から10進数へは2であります  

オープンは正しい証明しました

 

最初の質問を検討乗算を達成

小数:100 * 10 =秒あなたは答え、100 * 100それを知っている必要がありますか?100 * 100 = 10000

注意:接尾辞bは二進数を表し

バイナリ:100bは*部100b =あなたが等しいことをどのくらい知っていますか?実際には、ここで及び小数同じ理由100B * 100B = 10000B(これを介して実際に左への2つの被乗数シフトの結果であり、2 = 100 100 <<である00

 

INT _mul(INT V1、unsigned int型のV2){ 
    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でないが被乗数を移動しません

第二:分析1 0B 1は被乗数移動条件が満たされ、1であり、101B << 1B = 1010B

第三:乗数は終了、オーバー判断されました

 

おすすめ

転載: www.cnblogs.com/binaryAnt/p/11104901.html