Kontynuujemy naukę, tym razem staramy się opracować funkcję, która sprawdza, czy liczba jest parzysta. Do dzieła.

Na początku poddajmy 8 naszemu testowi na nieparzystość:

                 ( 8 ) ( 4 )  ( 2 )  ( 1 )
Liczba 8:          1     0      0      0
Maska 1:           0     0      0      1
Liczba & maska:    ---------------------- 8 & 1
Wynik              0     0      0      0  0
               

Ok, a 9 w teście na nieparzystość?

                 ( 8 ) ( 4 )  ( 2 )  ( 1 )
Liczba 9:          1     0      0      1
Maska 1:           0     0      0      1
Liczba & maska:    ---------------------- 9 & 1
Wynik              0     0      0      1  1
               

My chcemy, aby test na parzystość dawał odwrotne wyniki. Ok, nie będę męczyć, podam rozwiązanie:

                 ( 8 ) ( 4 )  ( 2 )  ( 1 )
Liczba 8:          1     0      0      0
Maska 1:           0     0      0      1
Liczba & maska:    ---------------------- 8 & 1
Wynik              0     0      0      0  0
Maska 2:           0     0      0      1
Wynik ^ Maska2:   ----------------------  0 ^ 1
Output:            0     0      0      1

Bitwise XOR (^) z taką samą maską na wyniku z testu nieparzystości zamienił nam 0 na 1. Teraz to test na parzystość.

Zobaczmy, czy z 9 też sobie poradzi:

                 ( 8 ) ( 4 )  ( 2 )  ( 1 )
Liczba 9:          1     0      0      1
Maska 1:           0     0      0      1
Liczba & maska:    ---------------------- 9 & 1
Wynik              0     0      0      1  1
Maska 2:           0     0      0      1
Wynik ^ maska2:   ----------------------  1 ^ 1
Output:            0     0      0      0

W przypadku liczb nieparzystych test na nieparzystość daje 1, ale robiąc 1 ^ 1 otrzymujemy zero.

Napiszmy naszą funkcję:

function isEvenBitwise(num){
    num = num & 1;
    return num ^ 1;
}

Jak zwykle później jeszcze w pętlę ją wrzucić musimy, przetestować, przerobić z długopisem i zeszytem, aż zrozumiemy jak to wszystko działa.