Junior
Mis vahe on uint ja int tüüpide vahel Go keeles?
sobes.tech AI
Vastus AI-lt
Go uint ja int tüübid tähistavad täisarve, kuid erinevad nende väärtuste vahemiku ja tähenduse poolest (märgitud/märgimata).
int (märgitud):
- Võib salvestada positiivseid ja negatiivseid numbreid ning nulli.
- Bittide arv (ja seega vahemik) sõltub arvutiarhitektuurist (32 või 64 bitti). 32-bitisel arhitektuuril on see 32 bitti, 64-bitisel - 64 bitti.
- Vahemik: alates -2<sup>n-1</sup> kuni 2<sup>n-1</sup>-1, kus n on bittide arv.
uint (märgimata täisarv):
- Võib salvestada ainult mitte-negatiivseid numbreid, alates nullist.
- Bittide arv sõltub samuti arhitektuurist (32 või 64 bitti) ning vastab
int-i suurusele. - Vahemik: alates 0 kuni 2<sup>n</sup>-1, kus n on bittide arv.
Peamine erinevus on see, et int kasutab ühe bitti märgi jaoks (positiivne või negatiivne arv), samas kui uint kasutab kõiki bite arvväärtuse esitamiseks. See võimaldab uint-il salvestada kahekordse suurusega positiivse vahemiku sama suurusega int-i puhul.
Valides int ja uint vahel, tuleks arvestada:
- Kas arv võib olla negatiivne? Kui jah, kasutage
int. - Kas on vaja maksimaalset positiivset vahemikku? Kui jah ja negatiivseid väärtusi pole vaja, võib sobida
uint. uintkasutatakse sageli bittmaskide, identifikaatorite, suuruste või koguste esitamiseks, mis loomult ei saa olla negatiivsed.
// int võib olla negatiivne
var signedInt int = -10
// uint ei saa olla negatiivne
// var unsignedInt uint = -10 // Kompilatsiooniviga
// Maksimaalsed väärtused (64-bitisel süsteemil)
// fmt.Println(math.MaxInt64) // 9223372036854775807
// fmt.Println(math.MaxUint64) // 18446744073709551615 (peaaegu kahekordne)
// Otse konverteerimine int ja uint vahel ei ole võimalik
var a int = 5
var b uint = 5
// if a == b { ... } // Viga: tüübid ei ühti, vaja selget konversiooni
// Selge konversioon
var c int = 10
var d uint = uint(c)
var e uint = 20
var f int = int(e)