Java怎么用位运算实现加减运算


这篇文章主要讲解了“Java怎么用位运算实现加减运算”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java怎么用位运算实现加减运算”吧!先分析如何用位运算实现加法运算。假设a=23b=36,使用位运算实现加法得到结果59。首先来看下233659的二进制信息。从上面的图中可以看到,两个数相加的结果与两个数异或的结果很相似,只不过在图中的2位置相加的时候,产生了进位,而异或是没有进位的,如果能拿到进位信息,把两个数异或的结果和进位信息的结果相加就能得到最终结果了,那么如果能拿到进位信息呢?上图中,59的二进制信息可以分为两部分,01100110001000,再结合2336的二进制信息来看,01100112336的异或结果,而2336相与的结果跟0001000很相似,只不过0001000中的1比相与结果往前移了一位。于是,我们可以得出,两个数的二进制进免费云主机域名位信息为两个数的相与在左移一位。经过上面的分析,我们可以得到了一个初步的运算结果,即两个数相加等于两个数异或加上两个数的相与左移1位,也就是a + b = (a ^ b) + ((a & b) 。先用2336来验证下。经过验证可以看到,刚才得出的结论是正确的。但是,我们要做到在整个运算过程中不能出现加号,接下来要想办法把这个加号给去掉。还是以2336为例,经过上面的运算我们把运算的位运算结果给化简下。23 + 36 = (23 ^ 36) + ((23 & 36) 也就是把2336的相加运算转化为了518的相加运算,接下来继续分析518的相加运算,也是通过异或和相与进行操作。51 + 8 = (51 ^ 8) + ((51 & 8) 嗯?可以发现我们已经得出59了,而且还加了个0,加了个0不就相当于加了个寂寞嘛,可以直接省略啊。由此,我们又可以得出一个结论,两个数的二进制进位信息为两个数的相与在左移一位,不停地循环这个过程,直到有一个数变为0,就能得到结果。现在来总结下整体的计算过程:把两个数相加,拆分成两步,两个数异或加上两个数相与左移1位。判断相与左移的结果是否为0。如果相与左移为0,两个数异或的结果即为相加的结果。如果相与左移结果不为0,把得到的新结果,重复执行第1~3步操作。经过上面的分析,来看下代码实现。运行程序,输出结果为59。还是以2336为例,如果要计算 36 - 23,该怎么办?36 - 23 不就相当于36 + (-23),可以理解为加上一个负数,这就可以了吗?不不不,要求的是不能出现加减符号,-23里面是有减法这个符号的。还记得前面我们分析的负数可以怎么表示吗?对了,负数是对一个数的取反再加1。嗯?又出现加号了,不过加法我们不是已经实现了吗?直接拿来用就好了。有了加法操作,减法就很简单了,来看下代码。运行一下输出结果为13。感谢各位的阅读,以上就是“Java怎么用位运算实现加减运算”的内容了,经过本文的学习后,相信大家对Java怎么用位运算实现加减运算这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是百云主机,小编将为大家推送更多相关知识点的文章,欢迎关注!

相关推荐: js计算时间差代码怎么写

这篇文章主要讲解了“js计算时间差代码怎么写”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“js计算时间差代码怎么写”吧!var begintime_ms = Date.parse(new Date(begint…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/03 15:05
下一篇 03/03 15:05

相关推荐