1.A+B问题

问题:给出两个整数a和b, 求他们的和, 但不能使用 + 等数学运算符。

理解:不运用运算符只能利用利用计算机的位运算。

思路:根据位运算,二进制中满2进1,例:2+3=0010+0011=0101,第一步先判断A和B相加是否有进位,如果没有直接为A|B(或运算),如果有第一步先作为异或运算(不考虑进位相加),2+3=0001,应该进位的值为A&B(和运算)再向左移一位,0100,将进位和刚才结果相加如果还有进位重复之前操作,如果没有进行或运算为结果。

class Solution {
public:
    /**
     * @param a: An integer
     * @param b: An integer
     * @return: The sum of a and b
     */
    int aplusb(int a, int b) {
        // write your code here
         int c = 0,d = 0;  
        while((a&b) != 0){  
        c = a^b;    
        d = (a&b)<<1;   
        a = c;  
        b = d;  
    }  
    return a|b; 
    }
};





Tips:

1.位运算符的优先级

1
~
2
<<、>>
3
&
4
^
5
|
6
&=、^=、|=、<<=、>>=
2.位运算符号

&和运算:两个都是1则为1

^异或运算:相同为0不同为1

|或运算:有1则为1全0为0

>> <<:右移 左移运算符




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值