- Published on
Swiftda Bitwise va Bit Shift operatorlari
- Authors
- Name
- ShoxruxC
- @iOSdasturchi
Bitwise operatorlar butun sonlar bilan bit darajasida ishlaydi. Ya'ni, ular sonlarning ichki ikkilik (binary) ko'rinishidagi bitlarini tekshiradi, o'zgartiradi yoki siljitadi.
Misollar:
a & b
a | b
Bu yerda: & β bitwise AND, | β bitwise OR operatori.
Swift tilidagi asosiy bitwise operatorlar:
&β AND|β OR^β XOR~β NOT<<β chapga siljitish (left shift)>>β o'ngga siljitish (right shift)
Bitwise AND operatori
Bitwise AND (&) faqat ikkala bit 1 bo'lsa, natijada 1 bo'ladi. Aks holda 0.
Misol:
12 β 00001100 25 β 00011001
Bitwise AND bajarilishi:
00001100
& 00011001
----------
00001000 β 8
Swift misoli:
Bitwise OR operatori
Bitwise OR (|) bitlardan kamida bittasi 1 bo'lsa, natija 1 bo'ladi.
Misol:
00001100
| 00011001
-----------
00011101 β 29
Swift misoli:
Bitwise XOR operatori
Bitwise XOR (^) bitlardan faqat bittasi 1, ikkinchisi 0 bo'lsa 1 qaytaradi. Agar ikkala bit bir xil bo'lsa (0β0 yoki 1β1), natija 0 bo'ladi.
Misol:
00001100
^ 00011001
-----------
00010101 β 21
Swift misoli:
Bitwise NOT operatori
Bitwise NOT (~) bitlarni teskarisiga o'zgartiradi:
0 β 1 1 β 0
Swiftda bitwise NOT natijasi quyidagi formula bilan aniqlanadi:
~N = -(N + 1)
Masalan: N = 35 β -(35 + 1) = -36
Ikkilik ko'rinishi:
~ 00100011
-----------
11011100 β -36
Bu 2's complement orqali manfiy songa aylantirilgan qiymat.
Swift misoli:
Izoh: ~12 = -(12 + 1) = -13
Chapga siljitish operatori (<<)
Left shift operator bitlarni chap tomonga ko'chiradi. O'ng tomondagi bo'sh joylar 0 bilan to'ldiriladi.
Misol:
0011 << 2 β 1100 (bu 12 ga teng)
O'ngga siljitish operatori (>>)
Right shift operator bitlarni o'ngga siljitadi.
- Musbat sonlarda bo'sh joylarga 0 qo'yiladi
- Manfiy sonlarda esa sign-bit (1) saqlanadi
Misol:
Tushuntirish:
4 >> 2β 1-4 >> 2β -1
π Masalalarni qanday yechish kerak?
β Namuna: 1-masala yechimi
Masala: Ikki sonning bitwise AND (&) natijasini qaytaring.
Bosqichma-bosqich yechim:
1-qadam: Masalani tushunish
Bizga a va b sonlari beriladi. Ularning bitwise AND natijasini qaytarishimiz kerak.
Bitwise AND qoidasi:
- 1 & 1 = 1
- 1 & 0 = 0
- 0 & 1 = 0
- 0 & 0 = 0
Ya'ni, ikkala bit ham 1 bo'lgandagina natija 1 bo'ladi.
2-qadam: Starter kodni ko'rish
func solve(_ a: Int, _ b: Int) -> Int {
// a & b ni hisoblang
return 0
}
3-qadam: Binary ko'rinishda tahlil (12 & 25)
12 = 00001100
25 = 00011001
-------------
& 00001000 = 8
4-qadam: Yechimni yozish
Natija: Barcha testlar o'tadi β
Izoh:
&operatori har bir bit pozitsiyasida AND bajaradi- Faqat ikkala bit 1 bo'lganda natija 1
solve(8, 4)= 0 chunki ularning 1 bitlari bir xil pozitsiyada emas
Xulosa
&(AND) β ikkala bit 1 bo'lsa 1|(OR) β kamida bittasi 1 bo'lsa 1^(XOR) β faqat bittasi 1 bo'lsa 1~(NOT) β bitlarni teskari qiladi<<(left shift) β chapga siljitadi (2 ga ko'paytirish)>>(right shift) β o'ngga siljitadi (2 ga bo'lish)
Bu operatorlar past darajadagi dasturlashda va optimallashtirish uchun ishlatiladi.