位运算及A+B

位是数据存储的最小单位,在计算机中的二进制系统,每个0或者1就是一个位(bit)

位操作

1.&(按位与) ----> 真真为真

2.|(按位或) ----> 假假为假

3.^(按位异或) —> 不同为真,相同为假

4.~(按位取反) —> 0为1,1为0

5.>>(按位右移) —> 把二进制位整体右移 —— 右移等于除了2的N次方,N是右移的位数

6.<<(按位左移) —> 把二进制位整体左移 —— 左移等于乘了2的N次方,N是左移的位数

A+B

分析:

确定需要进位
    1+1 = 2
    A:0000 0001
    B:0000 0001
    C:0000 0010
  A&B:0000 0001,当A和B某一位相同时(都是1),那么下次计算需要进位	
确定不需要进位
	1+2 = 3
	A:0000 0001
	B:0000 0010
	C:0000 0011
  A&B:0000 0000 == 0,即当A&B == 0时,不需要进位
不需要进位的时候,如何得到结果?
	1+2 = 3
	A:0000 0001
	B:0000 0010
使用A&B:0000 0000确定不需要进位,
当某一位是1的时候,需要保存下来,则使用^(按位异或)
	A^B:0000 0011 == 3
此时得到想要的结果
需要进位的时候,如何得到结果?
	1+3 = 4
	A:0000 0001
	B:0000 0011
	C:0000 0100
使用A&B:0000 0001的知,最后一位需要进位
使用<<(按位左移)得到一个进位后的C ———— (A&B)<<1 : 0000 0010
使用^(按位异或)得到原值不需要进位的部分D ———— (A^B) : 0000 0010

此时,将C与D重复上述操作

直到,&(按位与)的结果是0 ,说明没有进位了,也说明计算结束了

代码实现

#include <iostream>
using namespace std;
int main()
{
    int A,B;
    while(cin>>A&&cin>>B)
    {
        int flag1 = A&B;
        int flag2 = A^B;
        while(flag1 > 0)
        {
         	int C = flag1<<1;
    		int D = flag2;

            flag1 = C&D;
            flag2 = C^D;
        }
     cout << flag2 << endl;
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值