Sobes.tech
Junior

Go tilida uint va int turlari orasidagi farq nima?

sobes.tech AI

AIdan javob

Go'da uint va int turlari butun sonlar turini ifodalaydi, ammo ular mumkin bo'lgan qiymatlar diapaziri va ma'nosi (belgilangan/belgilangan emas) bo'yicha farq qiladi.

int (belgilangan butun son):

  • Musbat, manfiy va nol sonlarni saqlay oladi.
  • Bitlarda o'lchami (va shuning uchun diapaziri) kompyuter arxitekturasiga bog'liq (32 yoki 64 bit). 32-bit arxitekturada bu 32 bit, 64-bit arxitekturada esa 64 bit.
  • Diapazir: -2<sup>n-1</sup> dan 2<sup>n-1</sup> - 1 gacha, bu yerda n bitlar soni.

uint (belgilangan emas butun son):

  • Faqat manfiy bo'lmagan sonlarni saqlay oladi, nol bilan boshlanadi.
  • Bitlarda o'lchami ham kompyuter arxitekturasiga bog'liq (32 yoki 64 bit) va int o'lchamiga mos keladi.
  • Diapazir: 0 dan 2<sup>n</sup> - 1 gacha, bu yerda n bitlar soni.

Asosiy farq shundaki, int belgi uchun bittani ishlatadi (musbat yoki manfiy son), uint esa barcha bitlarni son qiymatini ifodalash uchun ishlatadi. Bu uint'ga o'z o'lchamidagi int bilan solishtirganda ikki baravar katta maksimal musbat diapazirni saqlash imkonini beradi.

int va uint o'rtasida tanlov qilishda quyidagilarni hisobga olish kerak:

  • Son manfiy bo'lishi mumkinmi? Agar ha bo'lsa, int ni foydalaning.
  • Maksimal musbat diapazir kerakmi? Agar ha va manfiy qiymatlar kerak bo'lmasa, ehtimol uint mos keladi.
  • uint turi ko'pincha bit maskalari, identifikatorlar, o'lchamlar yoki miqdorlarni ifodalash uchun ishlatiladi, ular tabiatan manfiy bo'lmaydi.
// int manfiy bo'lishi mumkin
var signedInt int = -10
// uint manfiy bo'lmaydi
// var unsignedInt uint = -10 // Kompilyatsiya xatosi

// Maksimal qiymatlar (64-bit tizimda)
// fmt.Println(math.MaxInt64)  // 9223372036854775807
// fmt.Println(math.MaxUint64) // 18446744073709551615 (taxminan ikki baravar ko'p)

// int va uint o'rtasida avtomatik konvertatsiya mumkin emas
var a int = 5
var b uint = 5
// if a == b { ... } // Xato: tur mos kelmasligi, aniq konvertatsiya talab etiladi

// Aniq konvertatsiya
var c int = 10
var d uint = uint(c)

var e uint = 20
var f int = int(e)