2016-08-10 2 views
-2

Все:Почему 2 XOR 3 является 1 в Javascript

Существует один вопрос с алгоритмом: добавьте целое число a и b, не используя + и -. Я пытаюсь использовать XOR для этого, но когда я использую 2^3, результат становится 1, я думаю, что мое понимание о^неверно, так что мне интересно, как я могу получить 5?

Благодаря

+1

Вы не можете просто напрямую подставить другого оператора для '+' и ожидать, что один и тот же результат - если вы могли бы нам не нужно было бы '+'. – nnnnnn

ответ

3
1 0 => 2 
^ 1 1 => 3 
= 0 1 => 1 

XOR означает либо один или другой, но не оба.

+1

OMG, спасибо, это так глупо вопрос .... LOL – Kuan

0

, что это правильный путь, что XOR работает

1: 0001 2: 0010 3: 0011

0010^0011 сочетает в себе 1s, где есть только 1. любое положение, в котором есть 1s в оба набора превращается в 0. Поэтому, 2^3 == 1.

Вот решение мозг тизер вопрос добавления без использования +

https://helloacm.com/how-to-compute-sum-of-two-integers-without-plus-and-minus-operators/

1

Интересно, что a ^= b был на самом деле неплохим стартом, но вам понадобится немного больше кода, чтобы превратить его в «добавить».

function addIntegers(a, b) { 
 
    var c; 
 
    
 
    while(b) { // while we have something to add ... 
 
    c = a & b; // c = bits that are set in both a and b 
 
    c <<= 1; // shift it by 1 position to the left to get the carries of addition 
 
    a ^= b; // here you go! 0+0 = 0^0, 0+1 = 0^1, 1+0 = 1^0, 1+1 = 1^1 + missing carry 
 
    b = c;  // restart with missing carries 
 
    } 
 
    return a; 
 
} 
 

 
console.log(addIntegers(123, 456));