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!