Javaのビット演算を実現するために、コンピューティング

Javaのビット演算を実現するために、コンピューティング

分析

= 13;

B = 9。

バイナリ:1101

Bバイナリ:1001

1.追加

かかわらずプラス進:0100は、結果と同等である^ Bに等しく、

プラス考慮ヘクス:結果に相当(&B)>> 1 10110に等しいです。

whileループまたは再帰的進数字が0に等しくなるまで

2.減算

AB == +( - b)は、これだけ負の数を計算する必要がある、あなたは、加算器を呼び出すことができます

-b =〜B + 1;(補数負の番号が格納されて格納され、反転相補= +1)

-bバイナリ:10111

3.乗算

参照

1201066-20190215101820443-747941214.png

* B:現在のビットが1に等しい場合、低乗数(B開始)から始まり、現在の被乗数はトラバーサル、乗算完全トラバースまでトラバース、現在の桁の乗算器のすべてのビットを左完了すると、結果はそれぞれに追加され

4.部門

/ bがABは、ラウンドロビン方式を使用することができ、または再帰により、レコードの数は、これは供給者の数であるので、Bの数で組成を求める変換します

2つのコードの実装

package org.jake.operation.four.arithmetic;

public class Main {
    public static void main(String[] args) {
        System.out.println(division(8, 5));
    }

    private static int add(int a, int b) {
        if (b == 0) return a;
        int carry = (a & b) << 1;
        a = a ^ b;
        return add(a, carry);
    }

    private static int add2(int a, int b) {
        int carry;
        while (b != 0) {
            carry = a * b << 1;
            a =            a ^ b;
            b = carry;
        }
        return a;
    }

    private static int subtraction(int a, int b) {
        b = ~b + 1;
        return add(a, b);
    }

    private static int mul(int a, int b) {
        int i = 0;
        int res = 0;
        while (b != 0) {
            if ((b & 1) == 1) {
                res += (a << i);
            }
            b = b >> 1;
            i++;
        }
        return res;
    }

    public static int division(int a, int b) {
        if (a < b) return 0;
        return division(subtraction(a, b), b) + 1;
    }

}

コード参照GitHubの操作四あたりの算術

おすすめ

転載: www.cnblogs.com/jakaBlog/p/12205729.html