Dopisujemy do naszej funkcji dodającej mechanizm wyliczania odpowiedniej liczby „w pamięci”. Do dzieła.

Przypomnijmy, na czym skończyliśmy:

function binAddDigits(x, y) {
    return x ^ y;
}

console.log(binAddDigits(0, 0)); //0
console.log(binAddDigits(1, 0)); //1
console.log(binAddDigits(0, 1)); //1
console.log(binAddDigits(1, 1)); //0 

Mamy tu mechanizm, który dla dwóch cyfr umieszcza odpowiednią cyfrę. Zobaczmy 1 ^ 1 i jak to się ma do 1 + 1:

1 + 1 - oczekiwany wynik 2

0 0 0 1
0 0 0 1
------- oczekiwany wynik:
0 0 1 0

1 ^ 1 - wynik 0

0 0 0 1
0 0 0 1 ^
-------
0 0 0 0

Jak widać obecny mechanizm jest w stanie przeprowadzić nam proces wstawienia odpowiedniej cyfry, ale brakuje nam mechanizmu, który wylicza to, co mamy zapisać w pamięci.

To, co w pamięci będziemy wyliczać na podstawie poprzednich cyfr, pytanie jak. Zobaczmy czego oczekujemy:

X:   Y:     Cyfra:     W pamięci:
0    0        0            0
0    1        1            0
1    0        1            0
1    1        0            1

Ok, jaki operator da nam wynik dla „w pamięci” taki, jakiego oczekujemy? Chyba operator &:

function binCalculateCarry(x, y) {
    return x & y;
}

console.log(binCalculateCarry(0,0)); //0
console.log(binCalculateCarry(0,1)); //0
console.log(binCalculateCarry(1,0)); //0
console.log(binCalculateCarry(1,1)); //1

Ok, mamy obliczone w pamięci. Reszta w następnej lekcji.