异或和与操作的新理解——不用加减乘除做加法

本文通过解析剑指offer中的JZ47问题,介绍了如何利用异或和与操作在不使用加减乘除的情况下进行整数加法。文章详细解释了二进制补码表示下的加法原理,以及异或操作相当于忽略进位的加法,与操作结合左移用于模拟进位的过程。通过实例展示了计算过程,并提供了具体代码实现。
摘要由CSDN通过智能技术生成

剑指offer JZ47 不用加减乘除做加法

题目描述:

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

解体思路:

整数在计算机中用二进制补码表示,加法的本质是每一个二进制数位做加法,并且对每一个二进制数位向上一位做进位。也就是说,对于两个二进制数相加,等于“忽略进位的加法结果”加上“进位结果”。而“异或”操作等效于忽略进位的加法;“与”操作等效于求进位,配合左移操作形成进位

举个例子:

假设我们要求10+7
10+7 = 1010+0111
1010^0111 = 1101 //这是每一位忽略进位的加法
1010&0111 = 0010 //这是进位情况,左移一位得到新的加数 0100
此时,10+7 = 1010+0111 = 1101+0100

1101^0100 = 1001
1101&0100 = 0100 左移一位得到1000
此时, 10+7 = 1010+0111 = 1101+0100 = 1001 + 1000

1001^1000 = 0001
1001&1000 = 1000 左移一位得到10000
此时,10+7 = 1010+0111 = 1101+

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值