Sobes.tech
Junior

Ինչ է տարբերությունը uint և int տիպերի միջև Go լեզվում?

sobes.tech AI

Պատասխան AI-ից

Տիպեր uint և int Go-ում ներկայացնում են ամբողջ թվային տիպեր, բայց տարբեր են ներկայացվող արժեքների տիրույթով և իմաստով (նշանավոր/նշանավոր չլինող):

int (նշանավոր):

  • Կարող է պահել ինչպես դրական, այնպես էլ բացասական թվեր, ինչպես նաև զրո:
  • Բիթերի չափը (և համապատասխանաբար, տիրույթը) կախված է համակարգչի ճարտարապետությունից (32 կամ 64 բիթ): 32-բիթանոց ճարտարապետության դեպքում դա 32 բիթ է, 64-բիթանոցում՝ 64 բիթ:
  • Տիրույթը՝ -2<sup>n-1</sup>-ից մինչև 2<sup>n-1</sup>-1, որտեղ n - բիթերի քանակը:

uint (նշանավոր չլինող ամբողջ թիվ):

  • Կարող է պահել միայն բացասական չլինող թվեր, սկսած զրոյից:
  • Բիթերի չափը նույնպես կախված է համակարգչի ճարտարապետությունից (32 կամ 64 բիթ) և համապատասխանում է int-ին:
  • Տիրույթը՝ 0-ից մինչև 2<sup>n</sup>-1, որտեղ n - բիթերի քանակը:

Հիմնական տարբերությունը այն է, որ int օգտագործում է մեկ բիթ նշանի համար (դրական կամ բացասական թիվ), իսկ uint օգտագործում է բոլոր բիթերը թվի չափը ներկայացնելու համար: Դա տալիս է uint-ին հնարավորությունը պահել նույն չափի int-ից երկու անգամ մեծ դրական տիրույթ:

Երբ ընտրում եք int և uint միջև, պետք է հաշվի առնել՝

  • Կա՞ հնարավորություն, որ թիվը բացասական լինի: Եթե այո, օգտագործեք int:
  • Անհրաժեշտ է՞ առավելագույն դրական տիրույթ: Եթե այո և բացասական արժեքներ չեն անհրաժեշտ, հնարավոր է, որ uint-ը համապատասխան լինի:
  • uint տիպը հաճախ օգտագործվում է բիթային մասկեր, նույնականացուցիչների, չափերի կամ քանակների ներկայացման համար, որոնք բնույթով չեն կարող լինել բացասական:
// int կարող է լինել բացասական
var signedInt int = -10
// uint չի կարող լինել բացասական
// var unsignedInt uint = -10 // Կոմպիլյացիայի սխալ

// Առավելագույն արժեքներ (64-բիթանոց համակարգում)
// fmt.Println(math.MaxInt64)  // 9223372036854775807
// fmt.Println(math.MaxUint64) // 18446744073709551615 (մոտ երկու անգամ մեծ)

// Անհրաժեշտ է բացահայտ փոխարկում
var a int = 5
var b uint = 5
// if a == b { ... } // Սխալ՝ տիպերի անհամապատասխանություն, անհրաժեշտ է բացահայտ փոխարկում

// Բացահայտ փոխարկում
var c int = 10
var d uint = uint(c)

var e uint = 20
var f int = int(e)