JavaScript Bitwise Operatorlari

JavaScript Bitwise Operatorlari

XodiyevLutfulloxon
Javascript Bitwise Operatorlari

Assalomu alaykum barchaga. Bugungi maqolamizda biz juda ko'p dasturchilarning tushunishida muammo bo'ladigan yoki juda ko'p dasturuchilarning nazaridan chetda qolgan lekin dasturlashda juda ahamiyati katta bo'lgan (Ayniqsa hard algoritmlarni yechishda juda qo'l keladigan) Bitwise operatorlari bilan tanishib chiqamiz. Bu mavzu nafaqat Javascript dasturchilari uchun muhim, balki boshqa dasturlash tillarini o'rganayotganlar uchun ham juda muhim deb o'ylayman. Nima uchun deganda hamma dasturlash tillarida Bitwise operatorlari deyarli bir xil ishlaydi deb aytishimiz mumkin.

Bitwise operatorlari —> bu int yoki unsigned int tipidagi sonlar bilan bitlar qatlamida ishlaydigan operatorlardir. Ya’ni ular bilan sonlar ustida o’nlik sanoq sistemasidagi holatda emas, balki to’g’ridan-to’g’ri 2 lik sanoq sistemasidagi holatida amallar bajariladi. Boshlanishiga ular g’alati va tushunarsiz tuyilsa ham, aslida ular sodda, lekin juda ham kuchli va foydali operatorlar hisoblanadi.

Eng asosiy narsa Bitwise operatorlari ikkita butun son ustida bajariladi va chiquvchi natija ham butun son bo’ladi.

Shu sababli ularni mantiqiy amallar bilan adashtirmaslik va ular o’rnida ishlatmaslik kerak bo’ladi.

Asosiy Bitwise Operatorlari

Dasturlashda, asosan, 6 bitwise operatorlari ko’rib chiqiladi va ishlatiladi. Ular:


  1. & (AND) operatori ikkita sonni operand sifatida oladi va ularni har bir biti (0 yoki 1) ustida AND amalini bajaradi. Natijaviy bit faqat ikkala bit ham 1 bo’lganda 1 bo’ladi.


Masalan, 37 va 23 sonlari ustidagi & operatori natijasini hisoblaymiz

Bitwise & Operator

Har mos ustun bir biriga ko'paytirilayapti va ikkala ustun 1 bo'lganida natija 1 bo'ladi qolgan holatda 0 bo'lishini ko'rishimiz mumkin. Natijada 101 hosil bo'ladi va uni yana 10 lik sanoq sistemasiga converter qilganimizda 5 natijani olishimiz mumkin.Bundan kelib chiqib Bitwise & operatorini qanday ishlashini tushunib oldingiz deb o'ylayman.


2. | (OR) operatori ikkita sonni operand sifatida oladi va ularni har bir biti ustida OR amalini bajaradi. Natijaviy bit ikkala bitdan hech bo’lmasa bittasi 1 bo’lganda 1 bo’ladi.

Masalan, 37 va 23 sonlari ustidagi | operatori natijasi 55 bo’ladi.

Bitwise | Operator

Yuqoridagi rasmda Bitwise | (OR) operatori bajarilganda 110111 result olinadi va uni 10 lik sanoq sistemasiga converter qilganimizda 55 natija olinayapti.


3. ^ (XOR) operatori ikkita sonni operand sifatida oladi va ularni har bir biti ustida XOR amalini bajaradi. Natijaviy bit ikkala bit har xil bo’lganda 1 bo’ladi.

Masalan, 37 va 23 sonlari ustidagi ^ operatori natijasi 50 bo’ladi

Bitwise ^ (XOR) Operator


4. << (left shift) operatori ikkita sonni operand sifatida oladi va birinchi (chapdagi) sonni bitlari xonasini chapga ikkinchi son qiymaticha suradi. O’ngdagi bo’sh xonalar nollar bilan to’ldiriladi.

Masalan, 37 << 3 amali quyidagicha ishlaydi:

37 dastlabki holatda

Left shift

Amal bajarilish paytida

Left shift

va yakunda javob 296 ga teng bo’ladi

Left shift

5. >> (right shift) operatori << operatorining aksi, ya’ni ikkita sonni operand sifatida oladi va birinchi (chapdagi) sonni bitlari xonasini o’ngga ikkinchi son qiymaticha suradi. Chapdagi bo’sh xonalar nollar bilan to’ldiriladi.

Yuqoridagi, ikkita operatorni (>> va <<) manfiy sonlar ustida ishlatish mumkin emas.


6. ~ (bitwise NOT) bitta sonni operand sifatida oladi va uning har bir biti ustida NOT amali bajaradi.

Bitwise operatorlaridan qanday foydalanish mumkin

Dasturlashda bu operatorlarni dasturlashda judayam keng qo’llash mumkin. Biz faqat ulardan dasturlash musobaqalarida va algoritmik masalalarni yechishda qanday qilib unumli foydalanishni ko’rib o’tamiz.


Bitwise operatorlari oddiy operatorlardan o’rtacha 66% ga tezroq ishlaydi.

  1. Butun sonni ikkiga bo’lishda: x >>= 1


Bunda son bitlarini bitta xona chapga surish kerak, ya’ni

x = 18(00010010)

x >> 1 = 9 (00001001)

Huddi shuningdek, x >>= 2 operatori sonni 4 ga, x >>= 3 operatori sonni 8 ga va hokazo tarzda bo’lishda ishlatilishi mumkin.

Yana qaytarib aytib o’taman x >>= 1 amali x /= 2 dan ko’ra ancha tez hisoblanadi

2. Butun sonni ikkiga ko’paytirishda: x <<= 1

Huddi yuqoridagi kabi x <<= 2 operatori sonni 4 ga, x <<= 3 operatori sonni 8 ga va hokazo tarzda ko’paytirishda ishlatilishi mumkin.

Faqat son natija tip chegarasidan chiqib ketmasligiga e’tibor bering.

3. Butun sonni juft toqlikka tekshirishda

if(number & 1) shart son toq bo’lganda true, juft bo’lganda false bo’ladi

Yuqoridagi amal ham n % 2 == 1 dan ko’ra tez ham yozishga qulay.

Yuqoridagi bilimlarimizni mustahkamlash maqsadida bitta algoritmni 2 xil usulda yechishga harakat qilamiz.Masala sharti : Bitta funksiyaga (method) yaratamiz. U bitta parametr number (son) qabul qilsin. Agar funksiyaga berib yuborgan argumentimiz 2 ning darajasi bo'lsa bizga true qaytarsin. Masalan number=16 bo'lsa 2 ning 4 darajasi bo'lgani uchun true qaytadi. Aks holda false qaytarsin.

O'zimizni usul:

IsPowerOfTwo() function (method)


Natija true qaytadi.Agar 2 ning darajasi bo'lmagan son kiritsangiz false qaytadi. Tekshirib ko'rishingiz mumkin.


2. Bitwise Operatorlari yordamida yechishga harakat qilamiz.

Bitwise Operatorlari uchun number&(number-1)=0 shart doimo o'rinli.Bu yerda number 2 ning darajasi bo'lishi shart. Nima uchun bunday ekanligini tushuntirishga harakat qilaman.

Ikkilik sanoq sistemasi uchun va o'nlik sanoq sistemasi orasidagi munosabat

1:1, 2:10, 3:11, 4:100, 5:101, 6:110, 7:111, 8:1000

Ixtiyoriy number & (number-1) uchun bu 0 ga teng chunki ikkala sondagi bir xil ustunlar o'rnidagi sonlar har xil bo'ladi. Ya'ni birinchisi 0 bo'lsa ikkinchisi 1 bo'ladi.

Aks holda teskarisi. Natija shuning uchun nolga teng bo'ladi. Masalan 4 & 3 ni olaylik

Bitwise & operator

Bitwise & operatorini ishlatganimizda natija 0 ga teng ekanligini ko'rishimiz

mumkin. 8 & 7 ni ham ko'rishimiz mumkin.

Bitwise & (AND) Operator

Bunda ham natija 0 ekanligini ko'rishimiz mumkin.

Endi Bitwise orqali yechimni ko'rsak

IsPowerOfTwo() function (method)

Ushbu yozgan kodimiz yuqoridagi kodga nisbatan ancha ixcham va tezroq ishlaydi.


Bugungi maqolamiz sizlarga oz bo'lsada tushunarli bo'ldi deb o'ylayman. Sizlar bilan Javascript Fullstack dasturchi Xodiyev Lutfulloxon bo'ldi. Bizni kuzatishda davom eting.

Telegram tarmog'idagi kanalimiz https://t.me/JsTutorial

Taklif va mulohazalar uchun @whoami_1999

























Report Page