Javaが乗算を実現する方法--(3つ)


最近1篇のjavaの筆記試験問題を見て、中は最も効率的な方法で2*8を求めることを要求して、それから第1反応は直接Javaの持参した乗算を使って、それから実はまたビット演算子を使うことができることを発見します"<
方法1(直接乗算):
この方法は最も直接的です.
// An highlighted block
	int d = 2 * 8;
		System.out.println(d);  //d = 16

方法2(forサイクル加算):
この方法では、乗算の原理を利用しています.すなわち、加算を複数回使用して、実際に完了した乗算効果を重畳します.
// An highlighted block
	int d = 0;

		for (int i = 0; i < 2; i++) {
			d += 8;
		}
		System.out.println(d);  //d = 16

メソッド3(ビット演算子を使用):
この方法はビット演算子を用いて計算し,機械のバイナリ数を直接操作し,最も効率的である.
// An highlighted block
		int d = 2<<3;
		System.out.println(d);  //d = 16

好奇心から、私はまたこの方法に基づいて、ビット演算+java持参乗算を使用して乗算を実現する方法を作りました(java持参より0-0速いかどうかは分かりません).コードは以下の通りです.
// An highlighted block
//   :      
	public static void mul(int a, int b) {
		int i = 1;
		//    
		if (a > b) {
			int z = a;
			a = b;
			b = z;
		}
		while ((b - (2 << i)) > 0) {
			i++;
		}
		int res = (a << i) + a * (b - (2 << (i - 1)));

		System.out.println(res);
	}