异或算法

异或:
1表达:a^b=a⊕b=aXORb; 既相同为0,不同为1;
1^1=0; 1^0=1;
用途:
1、交互两个数:a=5,b=10,用异或实现交换

程序代码:

#include<stdio.h>
int main()
{
	int a=5;
	int b=10;
	a=a^b;
	b=a^b;
//	a=a^b;
	printf("%d %d\n",a,b);
	return 0;
} 

2、因为电脑的数都是二进制的,所以可以转化二进制的位数和统计二进制中1或者0是奇数还是偶数。

(1):位反转
举例:10001000 在一些情况下,第四位和第五位需要反转,可以用10001000与00011000进行异或运算。
10001000 ^ 00011000 = 10010000
(2):统计某一位的奇偶数
将某个元素中的每一位逐步异或.
例如a1=1010,则b1=1 ^ 0 ^ 1 ^ 0 = 0,由此可以判断a中为1的位数是奇数还是偶数。
例如a2=10110,则b2=1 ^ 0 ^ 1 ^ 1 ^ 0 =1,由此可以判断a中为1的位数是奇数还是偶数。

3、找出序列中单个最小的数字:

程序代码:

#include<stdio.h>
int main()
{
	int a,b,c,d,e,f,n,m;
	scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
	n=a^b^c^d^e;
	printf("%d\n",n);
	return 0;
}

扩展:&(与)运算
都是1时结果才为1;
二进制与运算规则:1&1=1 1&0=0 0&0=0

发布了67 篇原创文章 · 获赞 39 · 访问量 2730

猜你喜欢

转载自blog.csdn.net/qq_44859533/article/details/100064869