LoginSignup
0
0

More than 1 year has passed since last update.

アルゴリズム ビット演算で2進数足し算

Posted at

ビット演算

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つです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0