Java利用位运算实现加减运算详解 |
||||
+ 目录
前言本文主要介绍如何使用位运算来实现加减功能,也就是在整个运算过程中不能出现加减符号。 加减乘除运算在计算机中,实际上都是用位运算实现的,今天就用位运算来模拟下加法和减法的运算功能。
思路分析先分析如何用位运算实现加法运算。
示例 假设 首先来看下
从上面的图中可以看到,两个数相加的结果与两个数异或的结果很相似,只不过在图中的2位置相加的时候,产生了进位,而异或是没有进位的,如果能拿到进位信息,把两个数异或的结果和进位信息的结果相加就能得到最终结果了,那么如果能拿到进位信息呢?
位运算进位 上图中, 于是,我们可以得出,两个数的二进制进位信息为两个数的相与在左移一位。
初步结果 经过上面的分析,我们可以得到了一个初步的运算结果,即两个数相加等于两个数异或加上两个数的相与左移1位,也就是 先用
经过验证可以看到,刚才得出的结论是正确的。 但是,我们要做到在整个运算过程中不能出现加号,接下来要想办法把这个加号给去掉。
去除加号 还是以 也就是把 嗯?可以发现我们已经得出 由此,我们又可以得出一个结论,两个数的二进制进位信息为两个数的相与在左移一位,不停地循环这个过程,直到有一个数变为0,就能得到结果。
整体思路现在来总结下整体的计算过程:
加法代码实现经过上面的分析,来看下代码实现。
?
运行程序,输出结果为59。
减法实现
减法分析 还是以 还记得前面我们分析的负数可以怎么表示吗?对了,负数是对一个数的取反再加1。嗯?又出现加号了,不过加法我们不是已经实现了吗?直接拿来用就好了。
减法代码实现有了加法操作,减法就很简单了,来看下代码。
?
|