只用位运算实现整数的加减乘除运算

来源:互联网 发布:重庆金蝶软件 编辑:程序博客网 时间:2024/05/02 01:12
public class AddMinusMultiDivideByBit {/** *  * 加法运算 * @param a * @param b * @return *  */public static int add(int a, int b) {int result = 0;while(b != 0){result = a ^ b; // 无进位的相加之和, 其结果还差进位后的值b = (a&b)<<1;//a&b的结果是需要进位的位, 于是将其左移, 与无进位的和再次相加a = result;}return result;}// 两个数的减法运算, 例如a-b, 可以看成两个数的加法运算, 例如上例可改成a+(-b)// 问题转换成了如何求一个数的相反数,方法为:将其取反然后加一./** * 减法运算 * @param a * @param b * @return */public static int minus(int a, int b){return add(a, negNum(b));}/** * 取一个数的相反数 * @param b * @return */private static int negNum(int b) {return (~b + 1);}/** * 乘法运算 * 算法思想 *  * a = 3 = 0011 * b = 5 = 0101 * 0011 * *0101 *          ------------ *          0011 *             0000 *            0011 *           0000 *         -------------- *           0001111            *  * 其实二进制的乘法运算与十进制的乘法算法一样 * 乘法过程:如果乘数b的第i(i >= 0,i = 0是乘数最右侧的那一位)位为1, * 那么该位与被乘数a相乘的结果S[i]就是(a << i); * 然后将这些所有的结果S[i]相加即为最后结果 * @param a * @param b * @return *  */public static int multi(int a, int b){int result = 0;while(b != 0){if((b&1) != 0){ // 看最右侧是否为1result = add(result, a);}a = a<<1;b = b>>1;}return result;}public static void main(String[] args) {int a = 3; int b = 5;System.out.println(add(a, b));System.out.println(minus(a, b));System.out.println(multi(a ,b));}}

0 0