Uczymy się sprawdzać podzielność przez 2 i 4 oraz wykonywać przesuwanie bitowe. Do dzieła.

Ok, oto liczba, przesuńmy ją 1 bit w prawo i w lewo:

                 ( 8 ) ( 4 )  ( 2 )  ( 1 )
Liczba 8:          1     0      0      0   (8)
8 >> 1  :          0     1      0      0   (4)
4 << 1  :          1     0      0      0   (8)

Ok, a teraz przesuwamy 1 w lewo i prawo 3:

                 ( 8 ) ( 4 )  ( 2 )  ( 1 )
Liczba 3:          0     0      1      1   (3)
3 >> 1  :          0     0      0      1   (1)
1 << 1  :          0     0      1      0   (2)

Czyli niepodzielna, przesunięcie o 1 w prawo (podzielenie bez reszty przez 2) i znowu w lewo (pomnożenie bez reszty przez 2) nie zwraca tej liczby.

Ok, nasza funkcja:

function bitwiseDivisibleByTwo(num){
    return (
        ((num >> 1) << 1  ) 
        === num);
}

console.log(bitwiseDivisibleByTwo(2));
//true
console.log(bitwiseDivisibleByTwo(3));
//false
console.log(bitwiseDivisibleByTwo(4));
//true

Ok, zobaczmy czy z 4 tak samo to działa:

console.log(12 >> 2); //3
console.log( 3 << 2); //12

console.log(14 >> 2); //3
console.log( 3 << 2); //12

Zatem w przypadku parzystych sprawdzenie podzielności jest bardzo proste:

function bitwiseDivisibleByFour(num){
    return (
        ((num >> 2) << 2  ) 
        === num);
}

console.log(bitwiseDivisibleByFour(12));
//true
console.log(bitwiseDivisibleByFour(14));
//false
console.log(bitwiseDivisibleByFour(16));
//true

Powiedzmy sobie szczerze, operatory bitowe są super. Więcej w następnych lekcjach!