Junior
Wat is het verschil tussen de typen uint en int in de programmeertaal Go?
sobes.tech AI
Antwoord van AI
De types uint en int in Go vertegenwoordigen gehele getaltypes, maar verschillen in het bereik van mogelijke waarden en hun betekenis (getekend/ongegetekend).
int (getekend geheel getal):
- Kan positieve, negatieve getallen en nul opslaan.
- De grootte in bits (en dus het bereik) hangt af van de architectuur van de computer (32 of 64 bits). Op een 32-bit architectuur is het 32 bits, op een 64-bit architectuur 64 bits.
- Bereik: van -2<sup>n-1</sup> tot 2<sup>n-1</sup> - 1, waarbij n het aantal bits is.
uint (ongegetekend geheel getal):
- Kan alleen niet-negatieve getallen opslaan, beginnend bij nul.
- De grootte in bits hangt ook af van de architectuur van de computer (32 of 64 bits) en komt overeen met de grootte van
int. - Bereik: van 0 tot 2<sup>n</sup> - 1, waarbij n het aantal bits is.
Het belangrijkste verschil is dat int één bit gebruikt om het teken te vertegenwoordigen (positief of negatief), terwijl uint alle bits gebruikt om de waarde van het getal weer te geven. Dit geeft uint de mogelijkheid om een maximale positieve waarde te bewaren die twee keer zo groot is als die van int van dezelfde grootte.
Bij het kiezen tussen int en uint moet je rekening houden met:
- Of de waarde negatief kan zijn. Zo ja, gebruik
int. - Of een maximale positieve waarde nodig is. Zo ja, en negatieve waarden niet nodig zijn, is
uintmogelijk geschikt. - Het type
uintwordt vaak gebruikt voor het weergeven van bitmaskers, identificatoren, groottes of hoeveelheden die van nature niet negatief kunnen zijn.
// int kan negatief zijn
var signedInt int = -10
// uint kan niet negatief zijn
// var unsignedInt uint = -10 // Compileerfout
// Maximale waarden (op een 64-bit systeem)
// fmt.Println(math.MaxInt64) // 9223372036854775807
// fmt.Println(math.MaxUint64) // 18446744073709551615 (ongeveer twee keer zo groot)
// Impliciete conversie is niet mogelijk tussen int en uint
var a int = 5
var b uint = 5
// if a == b { ... } // Fout: type-incompatibiliteit zonder expliciete conversie
// Expliciete conversie
var c int = 10
var d uint = uint(c)
var e uint = 20
var f int = int(e)