java中异或是怎样算的

例如i=50;j=60;i=i^j;那i是多少,怎样算的啊

概述

i = 14,异或算法转换二进制,同则取0异则取1;

解析

异或是一种基于二进制的位运算,用符号XOR或者^表示,其运算法则是对运算符两侧数的每一个进制位同值则取0,异值则取1. 

简单理解就是不进位加法,如1+1=0,0+0=0,1+0=1. 

For example: 

3^5 = 6 

转成二进制后就是 0011 ^ 0101 二号位和三号位都是异值取1 末尾两个1同值取零,所以3^5 = 0110 = 6

而 i = 50 ,j = 60;

所以:

i 的二进制 = 00110010

j 的二进制 = 00111100

同位相同取0,不同取1所以得出来的值为00001110

i = i ^ j;所以i = 00001110 = 14


拓展内容

异或运算符

性质

1、交换律 
2、结合律(即(a^b)^c == a^(b^c)) 
3、对于任何数x,都有x^x=0,x^0=x 
4、自反性 A XOR B XOR B = A xor 0 = A

异或运算最常见于多项式除法,不过它最重要的性质还是自反性:A XOR B XOR B = A,即对给定的数A,用同样的运算因子(B)作两次异或运算后仍得到A本身。这是一个神奇的性质,利用这个性质,可以获得许多有趣的应用。 例如,所有的程序教科书都会向初学者指出,要交换两个变量的值,必须要引入一个中间变量。但如果使用异或,就可以节约一个变量的存储空间: 设有A,B两个变量,存储的值分别为a,b,则以下三行表达式将互换他们的值 表达式 (值) : 
A=A XOR B (a XOR b) 
B=B XOR A (b XOR a XOR b = a) 
A=A XOR B (a XOR b XOR a = b)

#code:

google面试题的变形:一个数组存放若干整数,一个数出现奇数次,其余数均出现偶数次,找出这个出现奇数次的数?

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-05

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

例如

int a=4;
int b=6;
int c = a^b;//c的值是a和b的异或。值为2.

过程

 1、a的值二进制是

0000 0100 //这里去低8位,因为高位都一致。

 2、b的值二进制是

0000 0110

 3、异或后

0000 0010  //结果是2

第2个回答  2011-09-20
先把i和j的真值转换为补码,即:i=0011 0010 ,j=0011 1100;然后再进行异或运算(即相异为1)为:0000 1110;再将这个结果转为原码输出,结果为:14
第3个回答  推荐于2017-09-14
异或这些位运算都是针对二进制的。
i的二进制为110010.
j的二进制为111100.
110010
111100
001110=>这就是结果了。最后转换为十进制 14
一位一位的看,异或是相同为0 不同为1.本回答被提问者采纳
第4个回答  2011-09-20
因为你举得例子数字比较小,我们假设你说的50,60都是byte类型,java的byte用8位二进制来表示。50=00110010,60=00111100,异或是属于位运算符,还有&(或),|(非),~(非)运算符,理论上还有12种,离散数学里会有。其中异或就是将两个操作数按位进行异或操作,规则是1^0=1,0^1=1,0^0=0,1^1=0;所以00110010^00111100=00001110,转换成十进制就是14,所以i^j=14。然后执行赋值操作,所以i=14。
相似回答