Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我不知道';我不明白这个异或发生了什么_Javascript_Xor - Fatal编程技术网

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
所以要找到1的奇数,下面的代码 最初的结果是arr[0]为1。 所以在数组中,0^0变成0,2^2变成0,有3个1,所以1^1得到0,有了0^1,我们就剩下了重复奇数次的数字

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