Javascript 我不知道';我不明白这个异或发生了什么
我正在研究这个问题。 给定一个数组,找到出现奇数次的整数。 始终只有一个整数出现奇数次。” 我在网上提出了这个解决方案:Javascript 我不知道';我不明白这个异或发生了什么,javascript,xor,Javascript,Xor,我正在研究这个问题。 给定一个数组,找到出现奇数次的整数。 始终只有一个整数出现奇数次。” 我在网上提出了这个解决方案: function findOdd(A) { var n = 0; for(var i = 0; i < A.length; i++){ n = n^A[i]; } return n; } 您能告诉我在这种情况下它在做什么吗?对任何数字进行异或运算都会得到0。如果您知道只有一个数字出现奇数次,其他数字将通过自xoring将其自身抵消,而答案将是出现奇数
function findOdd(A) {
var n = 0;
for(var i = 0; i < A.length; i++){
n = n^A[i];
}
return n;
}
您能告诉我在这种情况下它在做什么吗?对任何数字进行异或运算都会得到0。如果您知道只有一个数字出现奇数次,其他数字将通过自xoring将其自身抵消,而答案将是出现奇数次的剩余数字。^是一个exor位运算符。所以当你这么做的时候
- 1^1是0
- 0^1是1
- 1^0是1
- 0^0是0
var-arr=[1,1,1,0,0,2];
var结果=arr[0];
对于(var i=1;iXOR,两个相同数字的值总是零。也就是说
A^A=0
所以,如果你对一个特定的数字进行异或运算,重复偶数次,结果将是零
在这里,最初n的值为零。将被异或偶数次的数字将得到零。而出现奇数次的数字,例如2m+1
number次,将在2m次出现时得到零,在最后一次出现时得到相同的数字
这就是此解决方案的工作原理。按位运算符处理32位数字。运算中的任何数字操作数都将转换为32位数字。结果将转换回JavaScript数字。^
是按位异或JavaScript运算符
按位异或运算符在每个位位置返回一个1,其中任一操作数(而非两个操作数)的对应位为1
如果a和b不同,则XOR b产生1。XOR运算的真值表为:
a b a XOR b
0 0 0
0 1 1
1 0 1
1 1 0
表达式的解释
让A=[1,2,3,4,5]
对于n=0,i=0
=>0^A[0]
=>0^1
=>转换为二进制0000^0001
结果为0001
,等于1
对于n=1,i=1
=>1^A[1]
=>1^1
=>转换为二进制1111^0010
的结果为1101
,等于13
以此类推……希望这个解决方案能帮助您理解上述表达式并消除所有疑问。您是在问XOR是做什么的吗?否则,“A”的具体内容是什么?用任何int对0进行xoring就是int。XOR是关联的和可交换的。QED.1^1等于0而不是13
a b a XOR b
0 0 0
0 1 1
1 0 1
1 1 0