异或运算
两个相同的数会消掉 可以在相同的数中找不同的数
如
#include <iostream>
#include <random>
#include <ctime>
#define N 10
using namespace std;
int main() {
mt19937_64 e(time(0));
uniform_real_distribution <double> dis(1,N-1);
int arr[N];
for (size_t i = 0; i <N; i++)
{
arr[i]=i;
}
arr[N-1]=dis(e);
for (size_t i = 0; i < N; i++)
{
cout<<arr[i]<<" ";
}
int temp;int index=dis(e);
temp=arr[N-1];
arr[N-1]=arr[index];
arr[index]=temp;
int x1=0;
for (size_t i = 0; i < N-1; i++)
{
x1=(x1^i);
}
for (size_t i = 0; i < N; i++)
{
x1=x1^arr[i];
}
cout<<endl;
cout<<x1<<endl;
return 0;
}
首先利用c++产生随机数 然后给定一个数组利用循环遍历赋值最后一个是随机数
然后再将随机数给到数组中随机分配最后随机分配打印输出
2。利用异或交换两个数字
#include<iostream>
using namespace std;
int main()
{
int a=90;
int b=80;
a=a^b;
b=a^b;
a=a^b;
std::cout<<"a的值为";
cout<<a<<endl;
cout<<"b的值为";
cout<<b<<endl;
return 0;
}
利用两数相消原理a=a^b 在^a则b变成了b=a
然后a再^b则是 a=b
【2】 & 在位移中的操作
利用按位与 判断奇偶性
& 在运算中是是全为1才为1否则为0
利用这个在二进制中与1进行运算
00000000000001
1111111111111111
无论这两个数是几都会被前边都会被消掉与最后的1进行判断如果是偶数1会被消掉变成0
如果是奇数1会被保留变成1
结果为