2. Tipovi podataka u C#

2.1. Numerički tipovi podataka

U brojčane (numeričke) tipove podataka spadaju celobrojni i decimalni tip (realni tip).

Za celobrojni tip se koriste sledeći identifikatori sbyte, byte, short, ushort, int, uint, long i ulong. Razlika između ovih tipova je u veličini broja koji mogu da prihvate kao promenljivu. Identifikatori sbyte, byte, short i ushort se koriste za manje cele brojeve (do 255), dok se za veće cele brojeve koriste int i uint. Identifikatori long u ulong koriste se za veoma velike cele brojeve.

Za realni tip koristimo: float, double i decimal. Razlika između ovih tipova je u obuhvatu i preciznosti.

Numeričke vrednosti se mogu koristiti za izvođenje matematičkih operacija (+ ,-, *, /).
Operator ‘%’ prikazuje ostatak posle celobrojnog deljenja.
Numeričke vrednosti možemo porediti pomoću logičkih operatora (==, <, <=, >, >=, !=).
Takođe, nad numeričkim operatorima se mogu izvršavati funkcije (Abs(x), Math.Exp(x), Math. Pow(x,y), Math.Sin(x)) itd.

A sad malo detaljnije:

Numeričkim tipovima podataka se predstavljaju celi i realni brojevi. Za predstavljanje celih brojeva postoji više tipova koji su prikazani u tabeli.

Tip

Opseg vrednosti

 Zauzeće memorije 

u bajtovima

.NET
tip

Sufiks

 sbyte

 -128 do 127

1

SByte


 byte

 0 do 255

1

Byte


 short

 -32 768 do 32 767

2

Int16


 ushort

 0 do 65 535

2

UInt16


 int

 -2 147 483 648 do 2 147 483 647

4

Int32


 uint

 0 do 4 294 967 295

4

UInt32

U

 long

 -9 223 372 036 854 775 808 do 9 223 372 036 854 775 807

8

Int64

L

 ulong

 0 do 18 446 744 073 709 551 615

8

UInt64

UL

U tabeli postoje tipovi koji počinju slovom "u" (unsigned) što znači da opseg vrednosti čine samo pozitivni celi brojevi.
Unapred definisani tipovi u jeziku C# alijasi su Framework tipova u imenskom prostoru System. Sledeće dve naredbe razlikuju se samo sintaksički:

int i = 5;
System.Int32 i = 5;
Realni brojevi su predstavljeni tipovima: float, double i decimal. Ovi tipovi se razlikuju po opsegu vrednosti i broju značajnih cifara. Među tipovima realnih brojeva, float i double se zovu tipovi s pokretnim zarezom (engl. floating-point types) i obično se koriste za naučna izračunavanja. Tip decimal se najčešće upotrebljava za finansijske proračune, gde su potrebni aritmetika brojeva sa osnovom 10 i velika preciznost. (Tehnički, decimal je takođe tip s pokretnim zarezom, mada se retko tako naziva.)

Tip

Opseg vrednosti

 Preciznost u broju 

cifara

 Zauzeće memorije u 

broju bajtova

.NET
tip

Sufiks

 float

 ± 1.5 x 10-45 do ± 3.4 x 1038

7

4

Single

F

 double

 ± 5 x 10-324 do ± 1.7 x 10308

15-16

8

Double

D

 decimal

 ± 1 x 10-28 do ± 7.9 x 1028

28-29

16

Decimal

M


Konverzije
C# može da konvertuje instance kompatibilnih tipova jedne u druge. Konverzijom uvek nastaje nova vrednost od postojeće. Konverzije mogu biti implicitne ili eksplicitne: implicitne konverzije se obavljaju automatski, dok je za eksplicitne konverzije potrebno pretvaranje (engl. cast). U sledećem primeru, implicitno konvertujemo tip int u tip long (koji ima dvaput veći kapacitet u bitovima od int) i eksplicitno konvertujemo tip int u tip short (koji ima upola manji kapacitet u bitovima od int):

int q = 555; // int je 32-bitni ceo broj
long w = q; /* Implicitna konverzija u 64-bitni ceo broj */
short r = (short)q; /* Eksplicitna konverzija u 16-bitni (kastovanje) ceo broj */
U opštem slučaju, implicitne konverzije su dozvoljene kada kompajler može da garantuje da će one uvek uspeti bez gubljenja informacija.
U suprotnom, morate obaviti eksplicitnu konverziju između kompatibilnih tipova.

Numerički sufiksi
Numerički sufiksi eksplicitno definišu tip konstante:

decimal d = 3.5M; // M = decimal (svejedno da li je malo ili veliko slovo)
Sufiksi U i L su retko kada potrebni, pošto se tipovi uint, long i ulong gotovo uvek mogu ili pogoditi ili implicitno konvertovati iz int.

Sufiksi F i M su najkorisniji i obavezni su pri navođenju frakcionih literala tipa float ili decimal. Bez sufiksa, sledeći iskaz se ne bi preveo, jer bi se smatralo da je vrednost 4.5 tipa double, koja se ne konvertuje implicitno u float ili decimal:

float f = 4.5F; // Neće se prevesti bez sufiksa
decimal d = -1.23M; // Neće se prevesti bez sufiksa
*
***

Deljenje celih brojeva
U operacijama deljenja celih brojeva uvek se odsecaju ostaci deljenja (brojevi se zaokružuju ka nuli). Deljenje promenljivom čija je vrednost nula izaziva grešku pri izvršavanju, engl. runtime error (DivideByZeroException).
Deljenje literalom ili konstantom 0 izaziva grešku pri prevođenju, engl. compile-time error.

Specijalne vrednosti tipova float i double

Za razliku od celobrojnih tipova, tipovi s pokretnim zarezom imaju vrednosti koje se u određenim operacijama tretiraju na poseban način. Te specijalne vrednosti su NaN (Not a Number – nije broj), +∞, –∞ i –0.
Klase float i double imaju konstante za NaN, +∞ i –∞ (kao i za druge vrednosti, uključujući MaxValue, MinValue i Epsilon). Na primer:

Console.Write (double.NegativeInfinity); // Minus beskonačno
Deljenjem broja različitog od nule nulom, dobija se beskonačna vrednost:

Console.WriteLine ( 1.0 / 0.0); // Beskonačno
Console.WriteLine (–1.0 / 0.0); // Minus beskonačno
Console.WriteLine ( 1.0 / –0.0); // Minus beskonačno
Console.WriteLine (–1.0 / –0.0); // Beskonačno
Deljenjem nule nulom ili oduzimanjem jedne beskonačne vrednosti od druge, dobija se NaN:

Console.Write ( 0.0 / 0.0); // NaN
Console.Write ((1.0 / 0.0) – (1.0 / 0.0)); // NaN