Published on

Swiftda Bitwise va Bit Shift operatorlari

Authors

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:

Swift
Bitwise AND misoli
var a = 12 var b = 25 var result = a & b print(result) // 8

Bitwise OR operatori

Bitwise OR (|) bitlardan kamida bittasi 1 bo'lsa, natija 1 bo'ladi.

Misol:

00001100
| 00011001
-----------
00011101   β†’ 29

Swift misoli:

Swift
Bitwise OR misoli
var a = 12 var b = 25 var result = a | b print(result) // 29

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:

Swift
Bitwise XOR misoli
var a = 12 var b = 25 var result = a ^ b print(result) // 21

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:

Swift
Bitwise NOT misoli
var b = 12 var result = ~b print(result) // -13

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:

Swift
Left shift misoli
var a = 3 // 0011 (binary) var result = a << 2 print(result) // 12

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:

Swift
Right shift misoli
var a = 4 var result = a >> 2 print(result) // 1 a = -4 result = a >> 2 print(result) // -1

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

Swift
1-masala yechimi
func solve(_ a: Int, _ b: Int) -> Int { return a & b } // Tekshirish print(solve(12, 25)) // 8 print(solve(5, 3)) // 1 (101 & 011 = 001) print(solve(7, 7)) // 7 (111 & 111 = 111) print(solve(8, 4)) // 0 (1000 & 0100 = 0000)

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.

Buy mea coffee