异或运算规则以及应用

异或

  1. 运算:a=100 (4) b=001(1) 则a^b=101(7)
  2. 应用: (1)两个数交换而不用中间变量。
    代码:
#include<iostream> 
using namespace std; 
int main(){ 
    int a=4,b=3;//a=100 b=011 
	a=a^b;//a=100^011=111 
	b=a^b;//b=111^011=100 
	a=a^b;//a=111^100=011
	cout<<a<<" "<<b<<endl; 
} 

运行结果:
这里写图片描述
(2)利用异或求一个数的奇偶性。先把一个数由十进制转换为二进制,再与0进行异或运算。如果结果为true,则此数为奇数。
代码:

#include<iostream>
using namespace std;
int a[10],n=5,j,ans;
int main(){
	while(n){a[j++]=n%2;n/=2;}
	for(int i=0;i<j;i++)ans^=a[i];
	if(ans)puts("n为偶数!");//异或结果为true则n为偶数,反之,反之。 
	else puts("n为奇数!"); 
}

(3)找出一堆数中的不同的异或运算的应用:
题目一:
有2n+1个数,只有一个单着,别的都是成对的,找出这个单着的数。比如:2 1 3 2 1。

#include<iostream>
using namespace std;
int main(){
	//用异或,因为每个数异或自己本身都是0,而0与任何数异或都是数本身。 
	int n,a[100];
	cin>>n>>a[1];
	for(int i=2;i<=n;i++)cin>>a[i],a[i]^=a[i-1];
	cout<<a[n]<<endl;
} 

题目二:
1-n放在含有n+1个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次。用异或求出重复值。

这里写图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值