Java位運算實現加法
阿新 • • 發佈:2021-10-11
Java位運算實現加法
Java位運算實現加法
引數 1000,2000 0000 0000 0000 0000 0000 0011 1110 1000 1000 0000 0000 0000 0000 0000 0111 1101 0000 2000 先進行& 操作判定是否有進位 0000 0000 0000 0000 0000 0011 1100 0000 & 操作 有進位左移一位 0000 0000 0000 0000 0000 0111 1000 0000 << 1 carryBit 引數 1000,2000 0000 0000 0000 0000 0000 0011 1110 1000 1000 0000 0000 0000 0000 0000 0111 1101 0000 2000 在將兩個值進行^ 異或運算 0000 0000 0000 0000 0000 0100 0011 1000 ^ 異或 result 0000 0000 0000 0000 0000 0111 1000 0000 carryBit 0000 0000 0000 0000 0000 0100 0011 1000 result 將進位和異或後的值進行& 操作判斷是否還有進位,沒有返回,有的話繼續遞迴 0000 0000 0000 0000 0000 0100 0000 0000 & 操作 0000 0000 0000 0000 0000 1000 0000 0000 << 1 carryBit 0000 0000 0000 0000 0000 0111 1000 0000 carryBit 0000 0000 0000 0000 0000 0100 0011 1000 result 在將兩個值進行^ 異或運算 0000 0000 0000 0000 0000 0011 1011 1000 ^ 異或 result 將進位和異或後的值進行& 操作判斷是否還有進位,沒有返回,有的話繼續遞迴 0000 0000 0000 0000 0000 0011 1011 1000 result 0000 0000 0000 0000 0000 1000 0000 0000 carryBit 0000 0000 0000 0000 0000 1011 1011 1000 ^ 異或 result
java 程式碼實現
/** * @author: Mikael **/ public class Client { public static void main(String[] args) { System.out.println(recursion(1024, 1024)); } // 遞迴 public static int recursion(int i, int j) { // 0000 0000 0000 0000 0000 0000 0000 0101 5 // 0000 0000 0000 0000 0000 0000 0000 0101 5 //& 0000 0000 0000 0000 0000 0000 0000 0101 5 //& 可以用來計算兩個數進行相加有無進位 int carryBit = (i & j) << 1; // 0000 0000 0000 0000 0000 0000 0000 0101 5 // 0000 0000 0000 0000 0000 0000 0000 0101 5 //^ 0000 0000 0000 0000 0000 0000 0000 0000 0 //^ 異或可以用來計算兩個數的加法不考慮進位 int result = i ^ j; if (carryBit != 0){ return recursion(result,carryBit); } return result; } }