1、不使用+-*/,实现加法
题目
5和7相加
解答
|-----------|---|---|---|---|
| 5的二进制 | 0 | 1 | 0 | 1 |
| 7的二进制 | 0 | 1 | 1 | 1 |
| 5和7异或 | 0 | 0 | 1 | 0 |
| 5和7位与 | 0 | 1 | 0 | 1 |
| 位与结果向左进1位 | 1 | 0 | 1 | 0 |
异或的结果和向左进位后的结果继续进行异或和位与左移的操作
操作步骤:
1、异或
2、位与操作
此时进行检测,如果位与的操作是0,异或的结果就是最后的结果
如果位与的操作不是0,继续操作
3、左移1位
4、更新计算对象
代码
#include<iostream>
using namespace std;
int sum(int num1,int num2)
{
int res1 ;
int res2 ;
while (1)
{
res1 = num1 ^ num2;
res2 = num1 & num2;
if (res2==0)
{
break;
}
res2 <<= 1;
num1 = res1;
num2 = res2;
}
return res1;
}
int main()
{
int a = 5;
int b = 7;
cout << sum(a, b);
}
2、异或运算的使用场景
1、一般使用在==判断两个数字是否相等的情况下,将两个数字异或,判断是否为0
2、清零时使用,自己异或自己
3、两个数字相互交换
假设a=5,b=9,交换a、b的值。
a=a^b; //a=a与b亦或的值
b=a^b; //b=a与b亦或的值再亦或b,则两个b抵消,只剩a的值,则b就附上了a的值
a=a^b; //a=a与b亦或的值再亦或a,则两个a抵消,只剩b的值,则a就附上了b的值