每天一题:不用加减乘除做加法(c语言)

不用加减乘除做加法

题目

在这里插入图片描述

思路

首先我们要弄清楚10进制的加法
例:5+7
第一步:5+7在个位上等于2,然后再往十位上进了一位
第二步: 个位上的数加上十位上进的数2+10=12
答案为12

所以我们也可以用类似方式来实现2进制的加法

  1. 计算相加等于多少(不考虑进位)
    (num1^num2)
    解释: 相同时是1,1或者0,0. 不考虑进位是都等于0
    2.计算进位的数
    (num1&num2)<<1
    各位做与然后向左移动一位
    3.相加

代码实现

int Add(int num1, int num2 ) {
    // write code here

    while(num2!=0)
    {
      int tem=num1^num2;//未进位的相加
       num2=(num1&num2)<<1;//要进的数
        num1=tem; //下一次要与num2相加的数
    }
    return num1;
}
  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值