异或:
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