位运算及A+B

简介: 位运算及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
• 4
• 5
• 6
确定不需要进位
  1+2 = 3
  A:0000 0001
  B:0000 0010
  C:0000 0011
  A&B:0000 0000 == 0,即当A&B == 0时,不需要进位
• 1
• 2
• 3
• 4
• 5
• 6
不需要进位的时候,如何得到结果?
  1+2 = 3
  A:0000 0001
  B:0000 0010
使用A&B:0000 0000确定不需要进位,
当某一位是1的时候,需要保存下来,则使用^(按位异或)
  A^B:0000 0011 == 3
此时得到想要的结果
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
需要进位的时候,如何得到结果?
  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 ,说明没有进位了,也说明计算结束了
• 1
• 2
• 3
• 4
• 5
• 6
• 7
• 8
• 9
• 10
• 11
• 12

代码实现

#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;
}
相关文章
|
存储 Java
一篇搞定位运算(&、|、^、~、>>、<<、>>>)
我们最了解的就是十进制 , 除了十进制 , 还有二进制 , 六进制 , 八进制等等 , 由于位运算操作就是二进制 , 所以我们主要来说一下二进制 , 十进制的个位有(0~9)这几个数字 , 而二进制也相同 , 二进制的个位上只有0和1
65 0
|
2月前
|
机器学习/深度学习
位运算详解
本文介绍了位运算符及其基本操作,并通过几个例题详细解析了位运算的应用。内容包括左移`&lt;&lt;`、右移`&gt;&gt;`、按位取反`~`、与运算`&`、或运算`|`和异或运算`^`等运算符的使用方法。基本操作部分展示了如何检查和修改二进制位,以及异或运算的性质。例题部分则通过判定字符是否唯一、丢失的数字、两整数之和和消失的两个数字等问题,具体说明了位运算的实际应用技巧。
58 7
位运算详解
|
6月前
|
编译器 Linux C++
详细解读C++中的位运算总结
详细解读C++中的位运算总结
37 0
|
7月前
|
C++
位运算
位运算“【5月更文挑战第23天】”
43 1
|
6月前
|
机器学习/深度学习
常见位运算的总结
常见位运算的总结
55 0
|
存储 Java 程序员
“高端”的位运算
大家好,我是王有志。原计划迭代作为预备知识的收尾,不过在解2的幂和4的幂时,想到关于数字2的问题可以通过位运算去解决,因此补充了关于位运算的内容。
94 1
位运算专题(个人理解)
位运算专题(个人理解)
78 0
|
算法 数据安全/隐私保护
基本的位运算
基本的位运算
|
算法
位运算能做什么
位运算能做什么
57 0