Bitu operatori ir ērti lietojami, un tie var izraisīt ātro kodu. Uzziniet, kas tie ir un kā tos izmantot.

Bitu operatori ir tie, kas darbojas binārā līmenī. Tie bieži ir ļoti ātri izpildāmi un parasti darbojas, pamatojoties uz diviem operandiem.

Varat izmantot bitu operatorus, lai manipulētu ar bināriem skaitļiem, optimizētu kodu, saspiestu datus un ieviestu grafikas vai spēļu programmēšanas metodes. Tāpat kā lielākajai daļai citu programmēšanas valodu, JavaScript ir lielisks bitu operāciju atbalsts.

Kas ir operatori?

Lielākajā daļā programmēšanas valodu tiek izmantots jēdziens "operators" — simbols, kas tulkam liek veikt noteiktu matemātisko, relāciju vai loģisko darbību.

Tur ir daudz dažāda veida JavaScript operators jums ir jāzina, sākot no tiem, kas izskatās pēc standarta matemātikas operatoriem, piemēram, "+", un beidzot ar operatoriem, kas salīdzina divas vērtības. Bitu operatori ir īpaša kopa, kas nodarbojas ar binārajiem skaitļiem.

Bitu UN (&) operators

JavaScript bitu veidā UN (&) operators salīdzina atbilstošos divu bitus

binārie operandi — skaitļi, kas satur tikai 0 un 1. Katram ievades bitu pārim atbilstošais izvades bits ir “1”, ja abi ievades biti ir “1” vai “0” citādi.

Šeit ir bitu UN operatora sintakse:

a un b

Šajā piemērā a un b ir operandi, ar kuriem veicat bitu darbību.

Lūk, kā darbojas bitu UN operators:

  1. Operācija UN attiecas uz katru atbilstošo bitu pāri a un b no labās puses uz kreiso.
  2. Ja abi biti ir 1, rezultāts ir 1. Ja kāds no bitiem ir 0, rezultāts ir 0.
  3. Rezultāts ir jauns skaitlis, kurā katrs bits apzīmē operācijas UN rezultātu attiecīgajiem bitiem a un b.

Piemēram:

ļaut a = 50; // 00110010
ļaut b = 100; // 01100100

ļaut rezultāts = a & b; // 00100000

konsole.log (rezultāts); // 32

Iepriekš minētajā piemērā a ir 50 decimāldaļās, kas atbilst binārajam skaitlim 00110010 un b ir 100 decimāldaļās, kas atbilst binārajam skaitlim 01100100. UN operators salīdzina katru atbilstošo bitu pāri no labās uz kreiso pusi un iegūst bināro skaitli 00100000, kas ir 32 decimāldaļās.

Bitwise VAI (|) operators

Bitu virzienā VAI (|) operators salīdzina atbilstošos divu operandu bitus un atgriež “1”, ja viens vai abi biti ir “1” un “0”, ja abi biti ir “0”.

Šeit ir bitu VAI operatora sintakse:

a | b

Kur a un b ir operācijas operandi.

Operators bitu virzienā VAI (|) darbojas tāpat kā bitu UN operators. Vienīgā atšķirība ir tā, ka operators VAI atgriež “1”, ja “vairs” no bitiem ir “1” un “0”, ja “abi” biti ir “0”.

Piemēram:

ļaut a = 50; // 00110010
ļaut b = 100; // 01100100

ļaut rezultāts = a | b; // 01110110

konsole.log (rezultāts); // 118

Iepriekš minētajā piemērā bitu VAI operators salīdzina katru bitu pāri no labās uz kreiso pusi (t.i., 0 | 0 = 0, 0 | 1 = 1, 1 | 1 = 1, un tā tālāk). Rezultātā iegūtais binārais skaitlis ir 01110110, kas ir 118 decimāldaļās.

Bitu XOR (^) operators

Bitu veida XOR (^) operators salīdzina atbilstošos divu operandu bitus un atgriež “1”, ja kāds no operandiem, bet ne abi, ir “1” un “0”, ja abi operandi ir “1” vai “0”.

Šeit ir bitu XOR operatora sintakse:

a ^ b

Kur a un b ir operācijas operandi.

Bitu veida XOR operators darbojas tāpat kā bitu OR un UN operatori. Vienīgā atšķirība ir tā, ka tā atgriež “1”, ja “vai nu, bet ne abus” ir “1” un “0”, ja “abi” operandi ir “1” vai “0”.

Piemēram:

ļaut a = 50; // 00110010
ļaut b = 100; // 01100100

ļaut rezultāts = a ^ b; // 01010110

konsole.log (rezultāts); // 86

Iepriekš minētajā piemērā operators XOR salīdzina katru bitu pāri no labās uz kreiso pusi (t.i., 0 ^ 0 = 0, 0 ^ 1 = 1, 1 ^ 1 = 0, un tā tālāk). Rezultātā iegūtais binārais skaitlis ir 01010110, kas ir 86 decimāldaļās.

Bitu virzienā NAV (~) Operators

Bitu veidā NAV (~) operators ir unārs operators, kas darbojas ar vienu veselu skaitli, apgriežot visus tā bitus. Citiem vārdiem sakot, tas maina katru “0” bitu uz “1” un katru “1” bitu uz “0”.

Šeit ir bitu NOT operatora sintakse:

~c

Kur c ir operands.

Bitu NOT operators darbojas, apgriežot visus operanda bitus, ieskaitot zīmju bitus.

Piemēram:

ļaut c = 10; // 00001010
ļaut d = -10; // 11110110

konsole.log(~c); // 11110101
konsole.log(~d); // 00001001

Iepriekš minētajā piemērā operators NOT invertē visus bitus (t.i., 01, 10uc), ieskaitot zīmju bitus.

Pa kreisi Shift (<

Kreisās maiņas operators novirza noteiktā skaitļa bitus pa kreisi. Operators ņem divus operandus: skaitli, kas jānobīda, un bitu skaitu, par kuru to pārvietot.

Tālāk ir norādīta kreisās maiņas operatora sintakse:

a << b

Kur a ir operands kreisās maiņas operatoram un b ir bitu skaits, par kādu operators pārvietos operandu.

Kreisās maiņas operators darbojas, pārbīdot katru operanda bitu pa kreisi par norādīto pozīciju skaitu un izmetot liekos bitus, kas pārvietoti pa kreisi.

Piemēram:

ļaut a = 50; // 00110010
ļaut b = 2;

ļaut rezultāts = a << b; // 11001000

konsole.log (rezultāts); // 200

Iepriekš minētajā piemērā kreisās maiņas operators binārā skaitļa 00110010 decimāldaļu 50 pārvietoja par divām vietām. Rezultātā iegūtā binārā vērtība ir 11001000, kas ir 200 kā decimāldaļa.

Zīmju pavairošana labās maiņas (>>) operators

Zīmes izplatīšanās pa labi (>>) pārvieto skaitļa bitus pa labi, vienlaikus saglabājot sākotnējā skaitļa zīmi. Operators ņem divus operandus: skaitli, kas jānobīda, un bitu skaitu, par kuru to pārvietot.

Tālāk ir norādīta zīmju pavairošanas labās maiņas operatora sintakse:

a >> b

Kur a ir labās maiņas operatora operands un b ir bitu skaits, par kādu operators pārvietos operandu.

Zīmju pavairošanas labās maiņas operators darbojas līdzīgi kā kreisās maiņas operators; vienīgā atšķirība darbības režīmā ir tāda, ka labā maiņa saglabā zīmi.

Piemēram:

ļaut a = -50; // 11001110
ļaut b = 2;

ļaut rezultāts = a >> b; // 11110011

konsole.log (rezultāts); // -13

Iepriekš minētajā piemērā labās puses maiņas operators pārvietoja decimāldaļu -50 (11001110) divas atstarpes pa labi, iegūstot decimāldaļu -13 (11110011).

Neparakstīts labās maiņas (>>>) operators

Neparakstītā labā nobīde (>>>) operators pārvieto skaitļa bitus pa labi par noteiktu pozīciju skaitu un aizpilda tukšās vietas kreisajā pusē ar nullēm. Operators izmet liekos bitus, ko tas nobīda pa labi.

Tālāk ir norādīta neparakstītā labās maiņas operatora sintakse:

a >>> b

Kur a ir labās maiņas operatora operands un b ir bitu skaits, par kādu operators pārvietos operandu.

Neparakstīts labās maiņas operators darbojas līdzīgi kā labā maiņa. Tomēr atšķirībā no labās maiņas operatora (>>), tas nesaglabā skaitļa zīmi, pārslēdzot. Tā vietā skaitlis tiek uzskatīts par neparakstītu veselu skaitli un aizpilda vistālāk esošā bitu ar nulli.

Piemēram:

ļaut a = -5; // 11111111 11111111 11111111 11111011
ļaut b = 2;

ļaut rezultāts = a >>> b; // 00111111 11111111 11111111 11111110

konsole.log (rezultāts); // 1073741822

Šajā piemērā neparakstīts labās maiņas operators pārvietoja “-5” divas atstarpes pa labi, faktiski noņemot zīmi un iegūstot decimāldaļu “1073741822”.

Bitwise operatoru lietojumprogrammas

Manipulējot ar atsevišķiem bitiem bināros skaitļos, bitu operatori var izveidot sarežģītu funkcionalitāti, ko citādi ir grūti vai neiespējami sasniegt ar tradicionālajām aritmētiskajām operācijām.

Izpratne par bitu operatoru izmantošanu var palīdzēt izveidot efektīvākas un veiktspējīgākas tīmekļa lietojumprogrammas.