Uczymy się pisać operację dodawania za pomocą operatorów bitowych. Na początku postaramy się zrozumieć jak działa dodawanie cyfr. Do dzieła.

Ok, rzućmy na to okiem:

0 + 0 = (cyfra-0, liczba-0)

0
0
--
0

0 + 1 = (cyfra-1, liczba-1)

0
1
--
1

1 + 1 = (cyfra=0, następna cyfra -1, liczba - 2):

 1
 1
--
01

Ok, najpierw musimy opracować motyw, aby można było te cyfry tak sumować. W ten sposób aby:

  • 0 + 0 dawało 0
  • 0 + 1 albo 1 + 0 dawało 1
  • 1 + 1 dawało 0 (de facto 2 ale to następna cyfra)

Mechanizm zapisywania w pamięci będzie w następnej lekcji. Na razie pomyślmy jaki operator bitowy może nam to obsłużyć. Zobaczmy kilka:

0         0      0
1 &       1 |    1 ^
--       ---    ---
0         1      1

0         0     0
0 &       0 |   0 ^
--        --    --
0         0     0

1        1     1
1 &      1 |   1 ^
--      ---   --
1        1     0

Jak widać nas satysfakcjonuje operator XOR. 0 i 0 daje 0, 0 i 1 daje 1, 1 i 1 daje 0. Zobaczmy, czy się dodaje:

0 + 0 = 0
    0
    0 ^
   ---
    0

0 + 1 = 1
    0
    1 ^
   ---
    1

1 + 1 = 2
2:     1 ^ 1:
1 0        1
           1 ^
        -----
           0 <---- zero na właściwym miejscu jak w 2, resztę programu obsłuży mechanizm trzymania w pamięci.

Ok, możemy dodawanie cyfr już sobie napisać:

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 

Jak widać pierwsza cyfra (od prawej) jest zawsze właściwa. Resztę opracujemy w następnej lekcji.