Junior
Mi a különbség a uint és az int típusok között a Go nyelvben?
sobes.tech MI
Válasz az MI-től
A Go nyelvben a uint és int típusok egész szám típusokat képviselnek, de különböznek a lehetséges értéktartományban és jelentésükben (előjeles/előjel nélküli).
int (előjeles egész):
- Pozitív, negatív számokat és nullát is tárolhat.
- A bitméret (és így a tartomány) a számítógép architektúrájától függ (32 vagy 64 bit). 32 bites architektúrán 32 bit, 64 bites architektúrán 64 bit.
- Tartomány: -2<sup>n-1</sup>-től 2<sup>n-1</sup>-1-ig, ahol n a bitek száma.
uint (előjel nélküli egész):
- Csak nem negatív számokat tárolhat, nullától kezdve.
- A bitméret szintén függ a számítógép architektúrájától (32 vagy 64 bit), és megegyezik az
intméretével. - Tartomány: 0-tól 2<sup>n</sup>-1-ig, ahol n a bitek száma.
A fő különbség az, hogy az int egy bitet használ a jel (pozitív vagy negatív szám) jelölésére, míg a uint az összes bitet a szám értékének ábrázolására. Ez lehetővé teszi a uint számára, hogy ugyanakkora méret mellett kétszeres maximális pozitív tartományt tároljon, mint az int.
Az int és uint közötti választásnál figyelembe kell venni:
- Lehet-e a szám negatív? Ha igen, használjon
int-t. - Szükség van-e maximális pozitív tartományra? Ha igen, és nincs szükség negatív értékekre, akkor a
uintmegfelelő lehet. - A
uinttípust gyakran használják bitek maszkjainak, azonosítóknak, méreteknek vagy mennyiségeknek a reprezentálására, amelyek természetüknél fogva nem lehetnek negatívak.
// int negatív lehet
var signedInt int = -10
// uint nem lehet negatív
// var unsignedInt uint = -10 // Fordítási hiba
// Maximális értékek (64 bites rendszeren)
// fmt.Println(math.MaxInt64) // 9223372036854775807
// fmt.Println(math.MaxUint64) // 18446744073709551615 (körülbelül kétszerese)
// Implicit típuskonverzió nem lehetséges az int és uint között
var a int = 5
var b uint = 5
// if a == b { ... } // Hiba: típus inkompatibilitás explicit konverzió nélkül
// Explicit típuskonverzió
var c int = 10
var d uint = uint(c)
var e uint = 20
var f int = int(e)