實現加法
public class arithmetic/*** 兩數之差
* a - b實際上就是a + (-b)
* 在實際中做減法時,-b是用補碼 取反 + 1
* @param a
* @param b
* @return
*/public static int substract(int a, int b)
/*** 求乙個數的相反數 取反再+1
* @param a
* @return
*/public static int negative(int a)
/*** 求乙個數的符號,
* 0則為正數,否則就返回-1
* @param a
* @return
*/public static int sign(int a)
/*** 將數變為正數,如果數為正數,則為其本身,如果為負數,則變為其相反數
* @param a
* @return
*/public static int positive(int a)
/*** 兩數乘積
* 先計算兩個正數的乘積,然後符號最後加上
* 兩個正數的乘積,a, b 就是 a 進行 b 次加法
* 注意最後加上符號
* @param a
* @param b
* @return
*/public static int multiply(int a, int b)
if(flag)
return res;
}/**
* 兩數之積
* 0101
* 0110
** 0000
* 0101
* 0101
* 0000
* 對應位置求和即可
** 根據 b 每一位為 1 就將 a 左移一位加到 res 上即可,為 0 就什麼都不做
* @param a
* @param b
* @return
*/public static int multiplay1(int a, int b)
a = a << 1;
b = b >> 1;
}if(flag) return negative( res );
return res;
}/**
* 兩數的商
* 用a - b,一直減,知道a < b時,此時減的次數就是商,a 就是餘數
* 注意還有符號
* @param a
* @param b
* @return
*/public static int divide(int a, int b)
if(flag)
return res;
}/**
* 兩數之商
* 上面那種方法,每次都是減去乙個 b,如果 b 太小的話,會計算的很慢
* 而如果以 b 的 2^i 倍開始減的話,如果 a 夠減,則結果上加上 2 ^ i 倍
* 首先要判斷 a 是否大於 b 的 2 ^ i倍
* 改為判斷 a / (2 ^ i) 與 b 的大小,這樣可以防止溢位
* a * (1 >> i) = a >> i
* (a >> i) >= b
* @param a
* @param b
* @return
*/public static int divide1(int a, int b)
i = substract( i, 1 );
}if(flag) return negative( res );
return res;
}public static void main(string args)
}
位運算實現加減乘除
include include 加法運算 int add int a,int b 補碼中正數轉負數的原理 int negative int a 減法運算 int sub int a,int b 判斷正負 bool isnegative int a 僅計算正數乘法 int multi help int...
位運算實現加減乘除
關於邏輯右移和算術右移 vs中,對於unsigned型別,是邏輯右移,對於signed,算術右移 加法器的實現 對於不考慮進製的加法 0 0 0 1 0 1 0 1 1 1 1 0 即是異或運算 考慮進製 0 0 1 0 0 0 1 0 1 1 1 即是與運算 以下程式,a即不考慮進製部分,b為進製...
位運算實現加減乘除
位運算的思想可以應用到很多地方,這裡簡單的總結一下用位運算來實現整數的四則運算。1.整數加法 cpp view plain copy intadd inta,intb return a 我的思路主要是利用a 1的位運算就是最左端 從第0位開始向左 連續的1變為0,原先a中為0的位置最低那一位變為1。...