##ビット演算
2進数の足し算をビット演算について調べてみようと思います。
public static void main(String[] args) {
System.out.println(addBinaryPlus("1101","1011"));
System.out.println(addBinaryNonPlus("1101","1011"));
public static String addBinaryPlus(String a, String b) {
int aInt = Integer.parseInt(a, 2);
int bInt = Integer.parseInt(b, 2);
int sum = aInt + bInt;
return Integer.toBinaryString(sum);
}//一般的な足し算演算
public static String addBinaryNonPlus(String a, String b) {
int aInt = Integer.parseInt(a, 2);
int bInt = Integer.parseInt(b, 2);
return Integer.toBinaryString(addBin(aInt, bInt));
}// ビット演算で足し算(最初の媒介変数がStringであると仮定したとき)
public static int addBin(int a, int b) {
if(b == 0) return a;
int sum = a^b;
int carry = (a&b) << 1;
return addBin(sum, carry);
}//再帰用ビット演算関数
}
####1101と1011という2つの進数のバイナリ
1101と1011という二つの2進数のバイナリがあると仮定したとき
普通の方法はこの2数を"+"を利用してaddBinaryPlus関数のように1次的な方法でコーディングすることが一番先に思い浮かぶ方法です。
2進数ということを知らせてくれて(parseInt)単純に + 演算で加えた後に2進数StringでtoBinaryStringしてみると足し算演算になりますが...
ここからもう一歩進み、
ビット演算の原理を利用すれば珍奇な経験をするようになります。
問題の出題意図が二進数足し算アルゴリズムの解法を"ビット演算"で解決したかを判断するのであれば、
再帰関数であるaddBinのようにコーディングできるようです。
足し算のためのビット演算解法の核心は、XOR、AND演算の2つです。