Junior
Go dilinde uint ve int türleri arasındaki fark nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go'da uint ve int türleri tam sayı türlerini temsil eder, ancak temsil edilebilir değer aralığı ve anlamları (işaretli/işaretsiz) açısından farklılık gösterir.
int (işaretli tam sayı):
- Pozitif, negatif ve sıfır değerleri tutabilir.
- Bit cinsinden boyut (ve dolayısıyla aralık), bilgisayar mimarisine bağlıdır (32 veya 64 bit). 32-bit mimaride 32 bit, 64-bit mimaride 64 bit'tir.
- Aralık: -2<sup>n-1</sup> ile 2<sup>n-1</sup> - 1 arasında, burada n bit sayısıdır.
uint (işaretsiz tam sayı):
- Sadece sıfır veya pozitif sayıları tutabilir.
- Bit cinsinden boyut, bilgisayar mimarisine bağlıdır (32 veya 64 bit) ve
intile aynıdır. - Aralık: 0'dan 2<sup>n</sup> - 1'e kadar, burada n bit sayısıdır.
Ana fark, int'in işareti göstermek için bir bit kullanması (pozitif veya negatif sayı), uint'ın ise tüm bitleri sayı değeri için kullanmasıdır. Bu, uint'a aynı boyuttaki int'e göre iki kat daha büyük maksimum pozitif aralık tutma imkanı sağlar.
int ve uint arasında seçim yaparken dikkate alınması gerekenler:
- Sayının negatif olma olasılığı var mı? Evet ise,
intkullanın. - Maksimum pozitif aralık gerekliyse. Evet ve negatif değerlere ihtiyaç yoksa, muhtemelen
uintuygundur. uinttipi, genellikle bit maskeleri, tanımlayıcılar, boyutlar veya doğası gereği negatif olamayacak miktarları temsil etmek için kullanılır.
// int negatif olabilir
var signedInt int = -10
// uint negatif olamaz
// var unsignedInt uint = -10 // Derleme hatası
// Maksimum değerler (64-bit sistemde)
// fmt.Println(math.MaxInt64) // 9223372036854775807
// fmt.Println(math.MaxUint64) // 18446744073709551615 (yaklaşık iki katı)
// int ve uint arasında örtük dönüşüm mümkün değil
var a int = 5
var b uint = 5
// if a == b { ... } // Hata: tür uyumsuzluğu, açık dönüşüm olmadan
// Açık dönüşüm
var c int = 10
var d uint = uint(c)
var e uint = 20
var f int = int(e)