用位运算实现四则运算
原文地址:https://www.cnblogs.com/ygj0930/p/6412875.html
1 /*这个代码主要用位运算实现四则运算*/ 2 public class FigureOut { 3 public static void main(String[] args) { 4 //用于测试我们自己的加法 5 System.out.println(add(9999,5)); 6 //用于测试我们的减法 7 System.out.println(minus(6,7)); 8 //用于测试乘法 9 System.out.println(multi(66, 2)); 10 //用于测试除法 11 System.out.println(sub(10,2)); 12 } 13 14 //加法的实现 15 public static int add(int a, int b) { 16 /*这里的原理是利用 17 * 1.a^b得到不进位的加法运算部分 18 * 2.a&b得到需要进位的部分 19 * 3.(a&b)<<1为需要进位的部分进位 20 * 4.总结起来为 a+b = a^b+(a&b)<<1 21 * 5.对于之间的加法我们会使用递归实现(实现加法怎能直接使用加法) 22 * */ 23 //算法开始 24 //首先计算一下不进位的部分 25 int p1 = a^b; 26 //计算需要进位的部分 27 int p2 = (a&b)<<1; 28 if(p2!=0) { 29 return add(p1, p2); 30 }else { 31 return p1; 32 } 33 } 34 //减法的实现 35 public static int minus(int a, int b) { 36 /*这里运用的原理是将减法转换为加法 37 * 1.将减数变成一个负数 38 * 2.将另一个数与该负数相加 39 * 3.调用我们的加法来实现相加 40 * */ 41 int p1 = ~(b-1); 42 return add(a,p1); 43 } 44 //乘法的实现 45 public static int multi(int a, int b) { 46 //定义一个int用于位数的记录 47 int i = 0; 48 //定义一个int用于最后结果的记录 49 int res = 0; 50 while(b!=0) { 51 //处理当前乘数位 52 /*首先判断当前为是否为1当是1时采取乘法的计算 53 * 为 54 否则直接进行下一位*/ 55 if((b&1)==1) { 56 res = add(res,a<<i); 57 b=b>>1;//改变b的值 58 i=add(i,1);//当前位处理完毕加一 59 }else { 60 b=b>>1; 61 i=add(i,1); 62 } 63 } 64 return res; 65 } 66 //实现除法 67 public static int sub(int a,int b) { 68 /*判断被除数里面有几个除数 69 * 这里利用的是减法 70 * 除法原理*/ 71 int res = 0;//亲测初始值可以随意设定 72 if(a<b) { 73 return 0; 74 }else { 75 //这里使用了递归 76 res = add(sub(minus(a,b),b),1); 77 } 78 return res; 79 } 80 81 }
这里的注释还算详细不做过多解释
中国很多地方还需要提升,还有很多问题需要解决,如果十年后中国还没有发生改变,我觉得我就白做中国人了