Deo zbornika Napredni Javaskript
Bitovni operatori u Javaskriptu
Za detaljno objašnjenje koncepta vidi Bitovni operatori
Iako se bitovski operatori uglavnom koriste u jezicima nižeg nivoa, mogu imati par korisnih primena u Javaskriptu. U tim slučajevima, oni su uglavnom brža alternativa drugim operacijama.
Provera jel broj paran / neparan
Provera jel broj neparan se može izvršiti pomoću bitovskog i (&
). Na primer, ovako proveravamo jel broj 7 neparan:
7 & 1
Za broj 4 dobićemo drukčiji rezultat:
4 & 1
Objašnjenje:
// 7 & 1
00000111 // 7
00000001 // 1
--------
00000001 // 1 (neparan)
// 4 & 1
00000100 // 4
00000001 // 1
--------
00000000 // 0 (paran)
Zamena vrednosti varijabli
Pomoću ekskluzivnog ili (^
) možemo zameniti vrednosti dve varijable, bez pomoći treće.
let a = 97, b = 98
a = a ^ b
b = b ^ a
a = a ^ b
console.log(a, b)
Može i skraćeno:
let a = 97, b = 98
a ^= b
b ^= a
a ^= b
console.log(a, b)
Objašnjenje:
// a = 97 (1100001)
// b = 98 (1100010)
// a ^= b
1100001 // 97 (a)
1100010 // 98 (b)
-------
0000011 // 3 (a)
// b ^= a
1100010 // 98 (b)
0000011 // 3 (a)
-------
1100001 // 97 (b)
// a ^= b
0000011 // 3 (a)
1100001 // 97 (b)
-------
1100010 // 98 (a)
Zaokruživanje brojeva
Dvostruka bitovska negacija (~~
) i bitovsko pomeranje (>>
ili <<
) nam mogu služiti za brzo zaokruživanja brojeva.
Zaokruživanje pozitivnih brojeva
Dvostruka negacija pozitivnih brojeva može zameniti Math.floor()
funkciju:
~~(5.3)
Zaokruživanje se može vršiti i pomoću “lažnog” bitovskog pomeranja (pomera za nula mesta ulevo ili udesno, zapravo menja samo tip):
5.3 >> 0
5.3 << 0
Zaokruživanje negativnih brojeva
Dvostruka bitovska negacija negativnih brojeva može zameniti Math.ceil()
:
~~(-5.3)
Bitovsko pomeranje takođe radi za negativne brojeve:
-5.3 >> 0
-5.3 << 0
Množenje i deljenje sa dva
Pomoću bitovnih pomeranja možemo brzo množiti i deliti brojeve sa osnovom dva. Na primer, delimo broj napola jedanput:
8 >> 1
Deli broj napola dva puta:
8 >> 2
Ili množimo broj sa dva jedanput:
8 << 1
Množimo broj sa dva dva puta:
8 << 2
Objašnjenje:
// 8 >> 1
00001000 // 8
00000100 // 4
// 8 >> 2
00001000 // 8
00000010 // 2
// 8 << 1
00001000 // 8
00010000 // 16
// 8 << 2
00001000 // 8
00100000 // 32
Konverzija tipa
Pomoću bitovnih operacija možemo vršiti efikasnu konverziju prostih tipova u broj. Npr. uz pomoć disjunkcije:
"3" | 0
true | 0
Ili pomoću “lažnog” pomeranja:
"5" >> 0
true >> 0
Obrtanje vrednosti
Pomoću bitovnog isključivog ili (^
) možemo obrtati vrednost između 0 i 1.
let stanje = 0
stanje ^= 1
I obratno:
let stanje = 1
stanje ^= 1