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.乗算
参照
* 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の操作四あたりの算術