Skip to content

Целобројни типови

Програмски језик C# и .NET окружење поседују много већу палету типова података. Целобројне типове (integral numeric types) користимо за представљање целих бројева (integer numbers). Сви целобројни типови у програмском језику C# су вредносни типови (value types) и основни типови (simple types) који се могу иницијализовати литералима. Такође, сви целобројни типови подржавају употребу аритметичких оператора, оператора поређења, оператора доделе и оператора за рад над битовима.

C# типОпсегВеличина.NET тип
sbyteод -128 до 127означени 8-битни цео бројSystem.SByte
byteод 0 до 255неозначени 8-битни цео бројSystem.Byte
shortод -32,768 до 32,767означени 16-битни цео бројSystem.Int16
ushortод 0 до 65,535неозначени 16-битни цео бројSystem.UInt16
intод -2,147,483,648 до 2,147,483,647означени 32-битни цео бројSystem.Int32
uintод 0 до 4,294,967,295неозначени 32-битни цео бројSystem.UInt32
longод -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807означени 64-битни цео бројSystem.Int64
ulongод 0 до 18,446,744,073,709,551,615неозначени 64-битни цео бројSystem.UInt64
Табела 1. Целобројни типови у програмском језику C#

У датој табели, C# типови из прве колоне представљају алијасе (псеудониме) .NET типова у четвртој колони. То значи да приликом декларације променљивих можемо равноправно користити и C# и .NET типове. На пример:

int a = 123;
System.Int32 b = 123;

У лекцијама које следе користићемо C# типове.

Подразумевана вредност сваког целобројног типа је нула, 0. За сваки целобројни тип дефинисане су константе MinValue и MaxValue којима су одређене најниже и највише вредности типа.

Литерали

Литерали целобројног типа могу бити:

  • декадни, без префикса
  • хексадекадни, са 0x или 0X префиксом
  • бинарни, са 0b или 0B префиксом (само у C# v7.0 или новијим верзијама!)

На пример:

var dekadniBroj = 42;
var heksadekadniBroj = 0x2A;
var binarniBroj = 0b_0010_1010;  // SAMO U C# v7.0 ILI NOVIJIM VERZIJAMA!

Литерали целобројног типа одређује се на основу суфикса на следећи начин:

  • Ако литерал нема суфикс, његов тип је први од следећих типова помоћу којег може да се представи његова вредност:int, uint, long, ulong.
  • Ако литерал има суфикс U или u, његов тип је први од следећих типова помоћу којег може да се представи његова вредност: uint, ulong.
  • Ако литерал има суфикс L или l, његов тип је први од следећих типова помоћу којег може да се представи његова вредност: long, ulong. Ако користимо суфикс l компајлер ће издати упозорење, јер мало слово l личи на број 1. Како би ово избегли користићемо увек велико слово L.
  • Ако литерал има суфикс UL, Ul, uL, ul, LU, Lu, lU или lu, његов тип је ulong.

Ако вредност литерала премашује UInt64.MaxValue компајлер ће издати грешку.

Конверзије

Уколико је одређен тип литерала int, а његова вредност не прелази границе наведеног целобројног типа, могуће је извршити имплицитну конверзију у sbyte, byte, short, ushort, uint или ulong. На пример:

byte a = 17;

Уколико је одређен тип литерала int, а његова вредност прелази границе наведеног целобројног типа, компајлер ће издати грешку. На пример:

byte b = 300;  // COMPILER ERROR!

Сваки целобројни тип можемо конвертовати у било који други целобројни тип. Ако вредност не прелази границе типа у који се конвертује, онда вршимо имплицитну конверзију, а у супротном морамо користити каст операторе.

Из типаУ тип
sbyteshort, int, long
byteshort, ushort, int, uint, long, ulong
shortint, long
ushortint, uint, long, ulong
intlong
uintlong, ulong
Табела 2. Имплицитне конверзије целобројних типова

Сваки целобројни литерал можемо конвертовати у било који други целобројни литерал помоћу каст оператора, односно кастовањем. На пример:

var a = (sbyte)42;
var b = (long)42;

Ако користимо каст операторе, онда вршимо експлицитну конверзију.

Из типаУ тип
sbytebyte, ushort, uint или ulong
bytesbyte
shortsbyte, byte, ushort, uint или ulong
ushortsbyte, byte или short
intsbyte, byte, short, ushort, uint или ulong
uintsbyte, byte, short, ushort или int
longsbyte, byte, short, ushort, int, uint или ulong
ulongsbyte, byte, short, ushort, int, uint или long
Табела 3. Експлицитне конверзије целобројних типова