Java中的异或

49 篇文章 2 订阅
在java程序里面的异或用法: 

相同输出0,不同输出1,例如: 
System.out.println(1^1); 输出0 
System.out.println(1^2);输出3,因为最后2个低位都不一样,所有输出3 

    异域的概念是相同为0不同为1.如果两个数值异或后的值相同,异或前可能不同。 
比如二进制:0010^0001=0011 而0000^0011=0011。 异或要慎用。 


    一道有意思的题目:很多成对出现数字保存在磁盘文件中,注意成对的数字不一定是相邻的,如2, 5,3, 4, 7,3, 4, 2,5……,由于意外有一个数字消失了,如何尽快的找到是哪个数字消失了? 

   由于有一个数字消失了,那必定有一个数只出现一次而且其它数字都出现了偶数次。用搜索来做就没必要了,利用异或运算的两个特性——

1.自己与自己异或结果为0,

2.异或满足 交换律。 


public class Test {
	
	public static void main(String[] args) {
	
		
		System.out.println("^:" + (3^3) );
		
		int[] arr = {2,4,6,5,8,2,5,6,4};
		System.out.println("lost:" + findLost(arr));
		
	}
	public static int findLost(int a[]){ 
        int result=0; 
        for(int i=0;i<a.length;i++) { 
            result^=a[i]; 
        } 
        return result; 
	} 


}
输出结果:

^:0
lost:8




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值