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.