Sobes.tech
Junior

Kāda ir atšķirība starp uint un int tipus Go valodā?

sobes.tech AI

Atbilde no AI

Go uint un int tipi pārstāv veselos skaitļus, bet atšķiras pēc to pārstāvamo vērtību diapazona un nozīmes (zīmēts/nezīmēts).

int (zīmēts):

  • Var glabāt pozitīvus un negatīvus skaitļus, kā arī nulli.
  • Bitu skaits (un attiecīgi diapazons) ir atkarīgs no datora arhitektūras (32 vai 64 biti). 32-bitu arhitektūrā tas ir 32 biti, 64-bitu - 64 biti.
  • Diapazons: no -2<sup>n-1</sup> līdz 2<sup>n-1</sup>-1, kur n ir bitu skaits.

uint (nezīmēts vesels skaitlis):

  • Var glabāt tikai ne-negatīvas vērtības, sākot no nulles.
  • Bitu skaits ir atkarīgs no arhitektūras (32 vai 64 biti) un atbilst int izmēram.
  • Diapazons: no 0 līdz 2<sup>n</sup>-1, kur n ir bitu skaits.

Galvenā atšķirība ir tā, ka int izmanto vienu bitu zīmes atpazīšanai (pozitīvs vai negatīvs skaitlis), bet uint izmanto visus bitus skaitļa vērtības attēlošanai. Tas ļauj uint glabāt divreiz lielāku pozitīvu diapazonu tāda paša izmēra int gadījumā.

Izvēloties starp int un uint, jāņem vērā:

  • Vai ir paredzēts, ka skaitlis var būt negatīvs? Ja jā, lietojiet int.
  • Vai nepieciešams maksimālais pozitīvais diapazons? Ja jā un negatīvas vērtības nav nepieciešamas, iespējams, derēs uint.
  • uint bieži tiek izmantots bitmaskām, identifikatoriem, izmēriem vai daudzumiem, kas pēc būtības nevar būt negatīvi.
// int var būt negatīvs
var signedInt int = -10
// uint nevar būt negatīvs
// var unsignedInt uint = -10 // Kompilācijas kļūda

// Maksimālās vērtības (64-bitu sistēmā)
// fmt.Println(math.MaxInt64)  // 9223372036854775807
// fmt.Println(math.MaxUint64) // 18446744073709551615 (aptuveni divreiz lielāks)

// Tieša pārveidošana starp int un uint nav iespējama
var a int = 5
var b uint = 5
// if a == b { ... } // Kļūda: tipu neatbilstība, nepieciešama skaidra pārveidošana

// Skaidra pārveidošana
var c int = 10
var d uint = uint(c)

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