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.