Подсетимо се целобројних типова у програмском језику C које смо користили у I и II разреду. За представљање целих бројева најчешће смо користили int
, а знамо да постоје и unsigned int
, short
, unsigned short
, long
и unsigned long
. Такође, користили смо и знаковни тип (char
, signed char
, unsigned char
) који је у програмском језику C подтип целобројног типа (на основу вредноси ASCII кôдова). Како у програмском језику C не постоји логички тип, вредности целобројног типа користили смо да одредимо да ли је нешто нетачно (0
) или тачно (различито од 0
).
Програмски језик 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 |
У датој табели, 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!
Сваки целобројни тип можемо конвертовати у било који други целобројни тип. Ако вредност не прелази границе типа у који се конвертује, онда вршимо имплицитну конверзију, а у супротном морамо користити каст операторе.
Из типа | У тип |
---|---|
sbyte | short , int , long |
byte | short , ushort , int , uint , long , ulong |
short | int , long |
ushort | int , uint , long , ulong |
int | long |
uint | long , ulong |
Сваки целобројни литерал можемо конвертовати у било који други целобројни литерал помоћу каст оператора, односно кастовањем. На пример:
var a = (sbyte)42;
var b = (long)42;
Ако користимо каст операторе, онда вршимо експлицитну конверзију.
Из типа | У тип |
---|---|
sbyte | byte , ushort , uint или ulong |
byte | sbyte |
short | sbyte , byte , ushort , uint или ulong |
ushort | sbyte , byte или short |
int | sbyte , byte , short , ushort , uint или ulong |
uint | sbyte , byte , short , ushort или int |
long | sbyte , byte , short , ushort , int , uint или ulong |
ulong | sbyte , byte , short , ushort , int , uint или long |