Java中异或运算符(^)及其运用

今天在LeetCode上刷题时碰到一道题没啥思路,看到大家解题时运用到了异或,所以趁着这个机会复习一下这个知识点吧!

异或运算(^)是以二进制数据为基础进行运算的。也就是说当代码中使用到异或运算时,都会先将两个条件进行转换,转换成二进制数据后,再进行运算。异域中同位如果值相同(都是0或者都是1)则为0,不同(一个是0,一个是1)为1。

在这里我们举个例子:
int a=3;
int b=8;
int c=a^b; //c的值为a和b的异或,输出值为11
具体运算过程如下:

1.a的二进制值是:

0000 0011

2.b的二进制值是:

0000 1000

3.异或运算后二进制值是:

0000 1011  //结果是11
异或运算法则:
  1. a ^ b = b ^ a
  2. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c
  3. d = a ^ b ^ c 可以推出 a = d ^ b ^ c
  4. a ^ b ^ a = b

了解了异或运算后回到那道算法题目,给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素.在不知道使用异或运算时,头都大了,现在我们可以这样:

int[] nums= {2,2,3,4,4};
for(int i = 1;i< nums.length;i++){ 
	nums[0] = nums[0]^nums[i]; 
 }
System.out.println(nums[0]);

上面的代码中nums[0]的值就是此数组中唯一出现的值,最后的结果我们只要通过异或运算的特点来得知,比如上面的数组[2,2,3,4,4],异或运算是满足交换规则的,对于2^2^3^4^4这样的异或运算,我们换一下位置等价得到(2^2)^(4^4)^3,通过两个相同的数进行异或运算可以得到0,那最终就会是0^0^3,最后会得到3.

  • 10
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值