Učíme se C (1. díl) - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



C/C++

Učíme se C (1. díl)

15. srpna 2000, 00.00 | Štve vás, že všichni programují v C a vy ne? Pak možná právě pro vás je
tu seriál o programování v C, jehož první díl si právě můžete přečíst.

Vítám vás všechny u prvního dílu seriálu o programovacím jazyku C, který, jak předpokládám, bude zajímavý především pro ty z vás, kteří hodlají na C přejít z jiného jazyka. No, ale teď už rychle k věci.

Číselné datové typy

Úplně na začátek se podíváme na zoubek datovým typům proměnných. Základní typy v C jsou prakticky stejné jako v jiných jazycích. Pro začátek se budeme věnovat proměnným jednoduchých číselných datových typů, mezi které patří celá a reálná čísla (záměrně ještě zapomínám na vyjmenovaný datový typ enum, na který přijde řada jindy).

celočíselné typy

Hlavním celočíselným typem v C je typ int. Je dobré preferovat právě tento datový typ, protože je přizpůsoben k tomu, aby operace s ním probíhaly co nejrychleji. V různých implementacích překladačů C může proměnná typu int obsadit 2 nebo 4 byty. Pokud tedy potřebujete mít jistotu, že na různých platformách zabere proměnná 2 byty, můžete použít odvozený typ short int, který by měl tomuto požadavku vyhovět vždy. Lze pro něj také použít zkrácené jméno short. Dalším celočíselným typem je long int. I u tohoto typu je možné použít zkrácené long. Nejmenším typem, kterým je možno reprezentovat celá čísla je typ char, který zabere v paměti jeden byte a jak je již z jeho názvu patrné, používá se často k ukládání znaků. Ty jsou pak v proměnných uloženy jako ascii kódy znaků a proto s nimi lze i nadále pracovat jako s čísly.

Použitím slov signed a unsigned ve specifikaci typu proměné pak rozhodujeme o znaménkovosti typu. Jak asi tušíte, použitím signed si vynutíme, aby typ proměnné byl znaménkový a naopak unsigned znamená, že výsledný typ bude neznaménkový. Pokud tato slova nepoužijeme, můžeme se spolehnout, že typy int, short a long budou implicitně považovány za signed, nicméně u typu char záleží na konkrétní implementaci překladače a tedy se nelze spolehnout na to, že je typ char implicitně znaménkový, nebo neznaménkový (pokud ovšem nepracujete výhradně v jednom překladači, o kterém víte jak tento typ implementuje).

typ dolni mez horni mez velikost (v bytech)
unsigned char  0  255 1
signed char  -128  127 1
unsigned short int  0  65 535 2
signed short int  - 32 768  32 767 2
unsigned int  0  65 535 2
signed int  - 32 768  32 767 2
unsigned long int -2 31 2 31 -1 4
signed long int 0 2 32 4


Tabulka ukazuje maximální reprezentovatelné hodnoty pro různé typy a také paměť, kterou objekty těchto typů alokují. problémem je, že norma jazyka C (ansi) nijak přesně tyto hodnoty nevymezuje. Údaje v tabulce by měly platit pro 16-bitové překladače. V 32-bitovém prostředí bude mít např. int parametry long int. Různé překladače se také mohou lišit rozdílnou implementací záporných čísel a proto se maximální přípustné hodnoty mohou lišit o 1. Naštěstí má každý překladač v souboru limits.h předdefinováné konstanty pro maximální hodnoty typů. Např maximální intová hodnota se dá zapsat pomocí konstanty INT_MAX.

reálné typy

V C existují tři typy reprezentující reálná čísla. Nejúspornější z nich, co se paměti týče, je typ float, který ale většinou neposkytuje dostatečnou přesnost. Tu by měl ve většině případů zajistit typ double. Stejně jako by se měl mezi celočíselnými typy preferovat int, mezi reálnými by to měl být typ double. Pokud budeme potřebovat ještě větší přesnost, poskytuje nám jazyk C ještě typ long double. Následující tabulka ukazuje rozsahy a alokovanou paměť jednotlivých reálných typů.

typ maximum přesnost (počet desetinných míst) velikost
float 3.40282 . 1038 6 4
double 1.79769313486232 . 10308 15 8
long double 1.18973149535723176 . 104932 19 10


Číselné konstanty

Jazyk C rozlišuje mezi třemi typy celočíselných konstant. Prvním typem jsou konstanty dekadické, které jsou tvořeny libovolným řetězcem číslic, který nezačíná nulou a který ještě může předcházet znaménko ‘+’, nebo ‘-‘.


12; -548,


Naopak konstanty, které nulou začínají jsou interpretovány jako octalová čísla, tedy čísla zapsaná v osmičkové soustavě. Je jasné, že použitelné znaky náleží intervalu 0-7.


14 (octalový zápis dekadického čísla 12)


Konstanty můžeme zapsat ještě v hexadecimálním tvaru tak, že před samotné hexadecimální číslo připojíme prefix 0x, nebo 0X.


0x15 (21 dekadicky)
0X3e
0xEF


Všechny konstanty jsou typu int. Vyjímku tvoří ty konstanty, které se nevejdou do rozsahu čísel int a proto musí být nějakého jiného typu s dostatečným rozsahem (např. long int). Typ konstanty můžeme ještě explicitně ovlivnit sufixy U a L (na velikosti nezáleží. (stále mluvím o sufixech :-))). Sufix ‘U’ určuje, že konstanta bude neznaménkového typu (unsigned) a ‘L’ zase vynucuje použití typu long int. Oba sufixy se mohou v libovolném pořadí kombinovat.


15L  (konstanta typu long int)
65984Ul (konstanta typu unsigned long int)


Pro reálné konstanty existují dva způsoby zápisu. Prvním z nich je zápis ve tvaru s desetinnou tečkou.


1 (typ int!)
1.0 (typ double)
.23
-.378
-125.5484


Druhou možností je použití semilogaritmického tvaru.


15e-6
485E5


Reálné konstanty jsou typu double, ale podobně jako v případě reálných konstant se použije reálný typ s větším rozsahem, pokud by typ double nebyl schopen hodnotu obsáhnout. A i pro reálné konstanty existují sufixy, kterými se dá výsledný typ ovlivnit. Jsou to znaky L a F. Sufixem L si vynutíme použití typu long double a sufix F mění typ na float.


3.6f
-.99F
0.4858L


Definice proměnných

Teď, když už známe typy, můžeme si nadefinovat proměnné. Na rozdíl od Pascalu se v definici proměnné v C píše nejdříve typ proměnné, který je následován indentifikátorem. Celá definice je pak zakončena znakem “;”.


int a;


V příkladu jsme nadefinovali proměnnou ‘a’, která je typu signed int. Je ale možné definovat více proměnných najednou a to jednoduše tak, že jednotlivé identifikátory oddělíme čárkou a středník zapíšeme až za poslední identifikátor.


double p, q, r;


Definici proměnné lze hned také spojit s její inicializací. Proměnnou můžeme inicializovat libovolným výrazem, který je vyhodnotitelný v době vzniku proměnné.


short int a=1;
long b=2*10+1, c;
int d=INT_MAX;

Tak to je pro dnešek všechno. Příště to bude... emm... To vlastně ještě nemám naplánováno, takže se nechte překvapit. :-)

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » C/C++  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: