标签:
1 /* 2 * 单位加:找与+对应的位运算,分析真值表得出是按位异或^ 3 * 进位:可以用<<进行,但是要判断是否存在进位操作,则需要&来判断。 4 * 加的操作执行到不进位为止,代码如下: 5 * 6 */ 7 LL quickadd(int x, int y) { 8 int xr = x ^ y; //加 9 int nd = x & y; //统计进位 10 while(nd) { 11 int xr1 = xr; 12 int nd1 = nd << 1; 13 xr = xr1 ^ nd1; //加 14 nd = xr1 & nd1; //统计进位 15 } 16 return xr; 17 } 18 /* 19 * 将被减数取相反数(补码)再相加即是减法 20 */ 21 LL quickminus(int x, int y) { //取被减数的补码再执行加法 22 y = ~y ^ 1; //取补码 23 int xr = x ^ y; 24 int nd = x & y; 25 while(nd) { 26 int xr1 = xr; 27 int nd1 = nd << 1; 28 xr = xr1 ^ nd1; 29 nd = xr1 & nd1; 30 } 31 return xr; 32 }
标签:
原文地址:http://www.cnblogs.com/vincentX/p/4716726.html