Sobes.tech
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 int mé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 uint megfelelő lehet.
  • A uint tí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)