当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

不用加减符号实现加减法

发表于: 2014-06-23   作者:BrokenDreams   来源:转载   浏览:
摘要:         今天有群友发了一个问题,要求不用加减符号(包括负号)来实现加减法。         分析一下,先看最简单的情况,假设1+1,按二进制算的话结果是10,可以看到从右往左的第一位变为0,第二位由于进位变为1。    
        今天有群友发了一个问题,要求不用加减符号(包括负号)来实现加减法。
        分析一下,先看最简单的情况,假设1+1,按二进制算的话结果是10,可以看到从右往左的第一位变为0,第二位由于进位变为1。
        第1位的值有4种,0+0=0、1+0=1、0+1=1、1+1=0,这正好符合“异或”的情况。
        第2位的值来自于第一位的进位加上本身的值,进位的情况也有4种,0+0=0、1+0=0、0+1=0,1+1=1,这正好符合“与”的情况。
        考虑一般性,a+b就等同于a^b + (a&b) << 1,而这又是一个加法,可递归求解,出口就是当进位为0的时候。
        看个例子:
11+2
转为二进制,套用上面公式分析:
 1011 + 0010
=1001 + 0100
=1101 + 0000
=1101
结果转为10进制为13

        可以自己在草稿纸上多看看例子观察下。

        所以Java代码实现如下:
public static int add(int a, int b){
		return b == 0 ? a : add(a ^ b ,(a & b) << 1);
	}


        那么减法怎么搞呢?减法也能用加法表示嘛,比如a-b就等于a+(-b),但不能出现负号,我们知道Java中整型数值编码方式为补码,所以一个数对应的负数就这个数“取反加1”,so 代码如下:
public static int sub(int a, int b){
		return add(a, add(~b, 1));
	}


        这是群友给的答案,有点意思,记录一下。

不用加减符号实现加减法

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
版权声明:可以任意转载,转载时请务必以超链接形式标明如下文章原始出处和作者信息及本声明 作者:
学校数据结构的课程实验之一。 用到的数据结构:双向链表 主要功能:对由用户输入的两个任意长的整
运算前,X、Y寄存器分别存储被加(减)数 和 加(减)数,计算结果存回X寄存器;F为加法器,能在命
可以直接复制此代码到http://www.w3cschool.cc/try/try.php?filename=tryjquery_hide这里替换掉原代
公司一个项目正在用MapObjects来实现基于桌面的地图操作,在地址定位时,MapObjects中提供了一些符
加: 读书、学习、旅行、工作……各种实践,不断精进,不逃避任何挑战,敢于冒险,接受不可能的任务
数值运算的核心是指加、减、乘、除四则算术。由于计算机中的数有定点和浮点两种表示形式,因此相应
实现方法: 用空的内联块,宽度高度都设置成0,其中一边的边框设置成可见,其它三边边框设置成透明
现在.NET的Ajax组件确实不少了,微软的ajax extensions用起来很方便,一个UpdatePanel就可以搞定一
参考文章:http://blog.csdn.net/masefee/article/details/5664416 ------------------------------
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号