Junior
Koja je razlika između tipova uint i int u jeziku Go?
sobes.tech АИ
Одговор од АИ
Tipovi uint i int u Go predstavljaju celobrojne tipove podataka, ali se razlikuju po opsegu mogućih vrednosti i njihovom značenju (sa znakom/bez znaka).
int (znakovni celobrojni tip):
- Može da čuva pozitivne, negativne brojeve i nulu.
- Veličina u bitovima (i, shodno tome, opseg) zavisi od arhitekture računara (32 ili 64 bita). Na 32-bitnoj arhitekturi to je 32 bita, a na 64-bitnoj - 64 bita.
- Opseg: od -2<sup>n-1</sup> do 2<sup>n-1</sup> - 1, gde je n broj bitova.
uint (bez znaka):
- Može da čuva samo nenegativne brojeve, počevši od nule.
- Veličina u bitovima takođe zavisi od arhitekture računara (32 ili 64 bita) i odgovara veličini
int. - Opseg: od 0 do 2<sup>n</sup> - 1, gde je n broj bitova.
Glavna razlika je u tome što int koristi jedan bit za predstavljanje znaka (pozitivan ili negativan broj), dok uint koristi sve bitove za predstavljanje vrednosti broja. To omogućava uint da čuva dvostruko veći maksimalni pozitivan opseg u poređenju sa int istog veličine.
Pri izboru između int i uint, treba uzeti u obzir:
- Da li je moguće da broj bude negativan. Ako jeste, koristite
int. - Da li je potrebniji maksimalni pozitivan opseg. Ako jeste i negativne vrednosti nisu potrebne, možda je prikladniji
uint. - Tip
uintčesto se koristi za predstavljanje maski bitova, identifikatora, veličina ili količina koje po svojoj prirodi ne mogu biti negativne.
// int može biti negativan
var signedInt int = -10
// uint ne može biti negativan
// var unsignedInt uint = -10 // Greška pri kompilaciji
// Maksimalne vrednosti (na 64-bitnom sistemu)
// fmt.Println(math.MaxInt64) // 9223372036854775807
// fmt.Println(math.MaxUint64) // 18446744073709551615 (otprilike duplo veće)
// Implicitna konverzija nije moguća između int i uint
var a int = 5
var b uint = 5
// if a == b { ... } // Greška: neusaglašenost tipova bez eksplicitne konverzije
// Eksplicitna konverzija
var c int = 10
var d uint = uint(c)
var e uint = 20
var f int = int(e)