2. Hodnotové typy

2.1. Celá čísla

První skupinou hodnotových typů, které ve výčtu byla uvedena, jsou celá čísla. V tabulce jsou uvedeny datové typy pro celá čísla, včetně velikosti, kterou vždy zabírá daný typ, rozsah hodnot, které lze do daného datového typu uložit. Dále tabulka obsahuje přípony specifikované u literálu (tento princip bude vysvětlen v následujícím textu) – viz Tabulka 1. Rozsah hodnot je uveden s čárkami, které oddělují řády tisíců. V tabulce si lze povšimnout, že některé typy umožňují pouze ukládat nezáporné hodnoty. Jedná se o typy: byte, ushort, uint, ulong (předpona u je zkratka anglického „unsigned“, což znamená celá čísla bez znaménka „+“ nebo „-“). Ostatní typy obsahují znaménka „+“ nebo „-“ (anglicky „signed“ - uváděné bez předpony, u datového typu byte předpona s, tj. sbyte).


Datový typ

Velikost (počet bitů)

Rozsah

Přípona (literál)

sbyte

8

-128 ÷ 127

 

byte

8

0 ÷ 255

 

short

16

-32,768 ÷ 32,767

 

ushort

16

0 ÷ 65,535

 

int

32

-2,147,483,648 ÷ 2,147,483,647

 

uint

32

0 ÷ 4,294,967,295

 

long

64

-9,223,372,036,854,775,808 ÷ 9,223,372,036,854,775,807

l nebo L

ulong

64

0 ÷ 18,446,744,073,709,551,615

ul nebo UL

Tabulka 1: Datové typy celých čísel


Jak již několikrát bylo uvedeno, datový typ specifikuje typ dat, který budeme do proměnné ukládat. Je zřejmé, že do celočíselného typu nebudeme ukládat textový řetězec "Ahoj světe!".

V některých případech však typ hodnoty přiřazený do proměnné nemusí být vždy jednoznačný. Uveďme např. hodnotu 45. Je to číselná hodnota, detailněji řečeno celé číslo, které můžeme přiřadit do celočíselné proměnné. Co se však stane, pokud se pokusíte tuto hodnotu přiřadit neceločíselnému typu, například proměnné s pohyblivou řádovou čárkou? Odpověď je, že C# v tichosti převede celočíselnou hodnotu na hodnotu s pohyblivou řádovou čárkou. To je relativně neškodné, ale nemusí to být vždy žádoucí. Měli bychom tedy opravdu určit, že jsme měli v úmyslu považovat literální hodnotu 42 za číslo s pohyblivou řádovou čárkou a omylem jsme ji nepřiřadili nesprávnému datovému typu proměnné. To můžeme zajistit připojením přípony k číselnému literálu. [6]

Literál tedy představuje zápis přímého zadání hodnoty, jejíž zápis není během kompilace měněn.

C# obsahuje různé číselné typy jako např. dlouhá celá čísla (dat typ long), která mají větší rozsah než celá čísla (datový typ int). Proto by měl být pro datový typ long použita přípona L pokud chceme zachovat tento velký rozsah – viz Kód 1.

//Deklarace proměnné pro uložení velkých celých čísel
long longPromenna;
//Přiřazení hodnoty proměnné s použitím literálu
longPromenna = 42L;

Kód 1: Příklad deklarace celočíselné proměnné s použitím přípony u literálu

Dalším případem, kdy je vhodné použití literálu, je u tzv. anonymního typu, kde datový typ je odvozen až při kompilaci kódu (není tedy dopředu známé, o jaký datový typ se jedná) - viz Kód 2.

//Deklarace proměnné s použitím anonymního typu (nutná inicializace)
var longPromenna = 42L;

Kód 2: Příklad deklarace proměnné anonymního typu s použitím přípony u literálu