Junior
რა განსხვავებაა uint და int ტიპებს შორის Go ენაში?
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)