C vs C#
C# je programski jezik koji nam omogućuje pisanje kako konzolnih tako i Windows aplikacija, pa čak i aplikacija za Web. U prvom delu koji se odnosi na osnove programskog jezika C# primeri će se odnositi na delove koda neke konzolne aplikacije dok će se u drugom delu detaljnije objašnjavati razvoj Windows aplikacija te će i primeri biti sa odgovarajućim grafičkim korisničkim interfejsom.
Svaki programski jezik ima elemente koji ga karakterišu i to su:
- azbuka,
- rezervisane reči,
- konstante,
- promenljive.
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.
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 |
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 |
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čnoDeljenjem 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čnoDeljenjem 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