#include "stdafx.h"
#include "iostream"
using namespace std;
//****************************************
//异或交换整数 陷阱 不能传同一个值去交换
/*
void exchange(int &a, int &b)
{
//没有判断是否相等 BUG函数
a ^= b;
b ^= a;
a ^= b;
}
*/
void exchange(int &a, int &b)
{//正解
if (a == b) return; //防止&a,&b指向同一个地址;那样结果会错误。
a ^= b;
b ^= a;
a ^= b;
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[2] = { 1, 2 };
exchange(a[0], a[1]); //交换a[0]和a[1]的值
printf("1---a[0]=%d a[1]=%d\n", a[0], a[1]);
exchange(a[0], a[0]); //将a[0]与自己进行交换
printf("2---a[0]=%d a[1]=%d\n", a[0], a[1]);
}
//****************************************
//1-n的整数里面少了一个数, 求之 异或算法
int FindNotInArr2(int* arr, int N)
{
int i = 1;
int j = 1;
int res = 0;
for (i = 0; i < N; i++, j++)
{
res ^= arr[i] ^ j;
cout << res << endl;
}
res ^= j;
return res;
}
int _tmain(int argc, _TCHAR* argv[])
{
int b[] = { 2, 4, 3, 1, 6, 9, 8, 7 };
int lenB = sizeof(b) / sizeof(int);
printf("%d\n", FindNotInArr2(b, lenB));
return 0;
}
关于异或的用法1交换整数(注意陷阱)2求整数序列中差的一个值
最新推荐文章于 2021-01-29 01:26:22 发布