Junior
Go dilində uint və int tipləri arasındakı fərq nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Go'da uint və int tipləri tam ədəd tiplərini ifadə edir, lakin onlar mümkün olan dəyərlər diapozonu və mənası (işarəli/işarəsiz) baxımından fərqlənir.
int (işarəli tam ədəd):
- Müsbət, mənfi və sıfır ədədləri saxlaya bilər.
- Bitlərdə ölçüsü (və buna uyğun diapazonu) kompüter arxitekturasına bağlıdır (32 və ya 64 bit). 32-bit arxitekturada bu 32 bit, 64-bit arxitekturada isə 64 bit-dir.
- Diapazon: -2<sup>n-1</sup> -dən 2<sup>n-1</sup> - 1-ə qədər, burada n bitlərin sayı.
uint (işarəsiz tam ədəd):
- Yalnız mənfi olmayan ədədləri saxlaya bilər, sıfırdan başlayır.
- Bitlərdə ölçüsü də kompüter arxitekturasına bağlıdır (32 və ya 64 bit) və
int-in ölçüsünə uyğundur. - Diapazon: 0-dan 2<sup>n</sup> - 1-ə qədər, burada n bitlərin sayı.
Əsas fərq odur ki, int işarəni göstərmək üçün bir bit istifadə edir (müsbət və ya mənfi ədəd), uint isə bütün bitləri ədədin dəyərini göstərmək üçün istifadə edir. Bu, uint-a eyni ölçüdə olan int-ə nisbətən iki dəfə böyük maksimum müsbət diapazon saxlama imkanı verir.
int və uint arasında seçim edərkən nəzərə alınmalı:
- Ədəd mənfi ola bilərmi? Əgər bəli,
intistifadə edin. - Maksimum müsbət diapazon lazım mı? Əgər bəli və mənfi dəyərlər lazım deyilsə,
uintuyğun ola bilər. uinttipi çox vaxt bit maskaları, identifikatorlar, ölçülər və ya təbiətcə mənfi ola bilməyən miqdarlara istinad etmək üçün istifadə olunur.
// int mənfi ola bilər
var signedInt int = -10
// uint mənfi ola bilməz
// var unsignedInt uint = -10 // Kompilyasiya xətası
// Maksimum dəyərlər (64-bit sistemdə)
// fmt.Println(math.MaxInt64) // 9223372036854775807
// fmt.Println(math.MaxUint64) // 18446744073709551615 (təxminən iki dəfə çox)
// İmplict konvertasiya mümkün deyil int və uint arasında
var a int = 5
var b uint = 5
// if a == b { ... } // Xəta: tip uyğunsuzluğu, açıq konvertasiya tələb edir
// Açıq konvertasiya
var c int = 10
var d uint = uint(c)
var e uint = 20
var f int = int(e)