从位级别来看: 价值观 x 与自身异或ed将始终导致0(检查: 1^1=0 以及 0^0=0 ). 价值观 y 与0进行异或运算将始终得到相同的值 y (检查: 1^0=1 以及 0^0=0 ). 因为它适用于单个位和 int 只有32位,完全相同的规则也适用 int 价值观。 因此,该方法不需要找出“哪些值不同”,因为用cancel out对一个值进行xor,然后用0对“剩余”值进行xor,只会返回相同的值。
private int extraNumber(int a, int b, int c) {
// 8421 -> this is bit level,
// let's compare a^b
// 0010 = 2 (a value)
// 0011 = 3 (b value, sum of 2nd + 1st bits)
// 0001 = 1 (after XOR with a^b)
// 0010 = 2 (c value)
// 0011 = 3 (the final output)
return a^b^c;
}
int a = 0b1010_1010;
int b = 0b1010_1010; //same value as b
int c = 0b1111_0000; //the remaining item
//CASE 1 (xor the different values first)
int d = a^c; // results in 0b0101_1010
int e = d^b; // results in 0b1111_0000 (the answer)
//CASE 2 (xor the same values first)
int d = a^b; // results in 0b0000_0000
int e = d^c; // results in 0b1111_0000 (the answer)
3条答案
按热度按时间xesrikrc1#
从位级别来看:
价值观
x
与自身异或ed将始终导致0(检查:1^1=0
以及0^0=0
).价值观
y
与0进行异或运算将始终得到相同的值y
(检查:1^0=1
以及0^0=0
).因为它适用于单个位和
int
只有32位,完全相同的规则也适用int
价值观。因此,该方法不需要找出“哪些值不同”,因为用cancel out对一个值进行xor,然后用0对“剩余”值进行xor,只会返回相同的值。
46scxncf2#
joachim的答案是正确的,为了用一个例子来补充更多的细节,假设您向方法传递了三个参数(2,3,2),通常是位级格式
...16 8 4 2 1
从右边开始,根据xor的真值表,https://en.wikipedia.org/wiki/xor_gate
3vpjnl9f3#
您还可以通过将代码a^b^c分解为两个语句来检查中间结果。
例如