Sobes.tech
Junior

Go тилинде uint жана int түрлөрүнүн айырмасы эмнеде?

sobes.tech AI

AIден жооп

Goда uint жана int түрлөрү бүтүн сандарды билдирет, бирок алардын маанилүү диапазону жана мааниси (белги/белги жок) боюнча айырмаланат.

int (белги менен):

  • Позитивдүү жана негативдүү сандарды, ошондой эле нөлдү сактай алат.
  • Биттердин өлчөмү (жана, демек, диапазон) компьютердин архитектурасына көз каранды (32 же 64 бит). 32-биттүү архитектурада бул 32 бит, 64-биттүү болсо 64 бит.
  • Диапазон: -2<sup>n-1</sup>ден 2<sup>n-1</sup> - 1ге чейин, анда n - биттердин саны.

uint (белги жок бүтүн сан):

  • Только нөлдөн башка оң сандарды сактай алат.
  • Биттердин өлчөмү да компьютердин архитектурасына көз каранды (32 же 64 бит) жана int менен бирдей.
  • Диапазон: 0дон 2<sup>n</sup> - 1ге чейин, анда n - биттердин саны.

Негизги айырмачылык — int белгинин көрсөтүү үчүн бир битти колдонсо, ал эми uint бардык биттерди санды көрсөтүү үчүн колдонуп, uint ошол эле өлчөмдөгү intке караганда эки эсе чоң оң диапазонду сактай алат.

int жана uint ортосунда тандоодо:

  • Сан оң болору күтүлүүдөбү? Эгер ооба болсо, int колдонуу керек.
  • Максималдуу оң диапазон керекпи? Эгер ооба жана терс маанилер керек эмес болсо, анда uint ылайыктуу.
  • uint көбүнесе биттик маскалар, идентификаторлор, өлчөмдөр же сандар үчүн колдонулат, алар өзүнүн табиятында терс болбойт.
// int терс болушу мүмкүн
var signedInt int = -10
// uint терс болбойт
// var unsignedInt uint = -10 // Компиляция ката

// Максималдуу маанилер (64-биттүү системеде)
// fmt.Println(math.MaxInt64)  // 9223372036854775807
// fmt.Println(math.MaxUint64) // 18446744073709551615 (жубайы эки эсе чоң)

// int жана uint ортосунда көзмө-көз түрдө түрдүү болушу мүмкүн
var a int = 5
var b uint = 5
// if a == b { ... } // Ката: түрлөрдүн шайкеш келбеши, ачык түрдө түрлөрдү өзгөртүү керек

// Ачык түрдө түргөртүү
var c int = 10
var d uint = uint(c)

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