使用位运算实现int32位 整数的加减乘除
3 月,跳不动了?>>> 使用位运算实现int32位 整数的加减乘除 我觉得比较难想的是加法吧。 首先加法,脑海中脑补二进制加法,相同位相加,超过2 ,则进1,留0 那么用位运算怎么实现呢?其实理解了异或和与操作,就很容易想出来了。 我觉得异或操作和与操作完全就是实现加法的。 异或就是相同位相加最后留下的结果,而与就是相同位相加是否进1的结果。 异或:相同位 相同为0,不同为1。 与:相同位 都是1结果才是1,否则都是0。 这不就是二进制相加吗? 异或 与 1+1 = 0 进1 1+0 = 1 进0 0+0= 0 进0 所以加法就是,每次先异或一下,然后算出来进位的结果,再左移一位,因为是进位嘛 static int Add ( int x, int y ) { while (y != 0 ) { int z = x; x ^= y; y &= z; y <<= 1 ; } return x; } 减法,就很容易实现了,减一个数等于加上这个数的负数 一个数怎么变成负数呢?取反码然后+1 所以减法就是 static int Sub ( int x, int y) { int z = Add(~y, 1 ); return Add(x, z); } 那么乘法呢,简单的想法是,一个一个想加呗,a* b不就是b个a相加,对不对,想法的是对的,但是我们要利用二进制的思想,也就倍增的思想。