Подсетимо се целобројних типова у програмском језику 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 |