Programovanie v jazyku C++

Dátové typy


Základné dátové typy

Vlastnosti základných dátových typov sú určené pravidlami definovanými kompilátorom. Pri dátových typoch je dôležité vedieť, aký veľký priestor v pamäti zaberajú. V norme ANSI-C nie je explicitne určená veľkosť dátových typov, stanovené sú pre každý dátový typ len hranice najmenšej a najväčšej zobraziteľnej hodnoty. Tieto hranice nájdete v súboroch limits.h a float.h. C++ používa 4 základné dátové typy. Premenná typu char môže byť reprezentovaná 1 textovým znakom a zaberá minimálne 1 byte. Premenná typu int zaberá minimálne 2 byte. Premenné typu float a double reprezentujú čísla s plávajúcou desatinnou čiarkou, v pamäti počítača sú väčšinou uchvávané v normovanom IEEE formáte.

Definíciu a inicializáciu premenných základných dátových typov je možné zlúčiť do jedného kroku. Neinicializované premenné majú nedefinovanú hodnotu, niektoré kompilátory nastavujú hodnoty neinicializovaných premenných na nulu, na toto sa ale pri Vašich programoch nespoliehajte.

// definicia premennych bez inicializacie
char protein;
int pocet;
float teplota;
double tlak;

// definicia premennych s inicializaciu
char znak = '>', pismeno = 'A';
int dole = 35, hore = 75;
float konstanta = 1.2345;
double maxHodnota = 3.48e+6;
 

Sémantiku základných dátových typov je možné meniť pomocou špecifikátorov. V C++ existujú 4 špecifikátory: long, short, signed a unsigned. Špecifikátory long a short zväčšujú alebo zmenšujú rozash hodnôt dátového typu int. Pre čísla s plávajúcou desatinnou čiarkou je povolená len kombinácia long double. Špecifikátory signed a unsigned určujú, či pri dátových typoch int a char je potrebné uvažovať zo znamienkom. Bez použitia špecifikátora sú celočíselné dátové typy deklarované ako signed. Veľkosť premenných rôznych typov zistíte použitím operátora sizeof():

exam0200.cpp

#include <iostream.hpp>

void main()
{
  char c;
  unsigned char cu;
  int I;
  unsigned int iu;
  short int is;
  short iis;            // zodpoveda short int
  unsigned short int isu;
  unsigned short iisu;  // zodpoveda unsigned short int
  long int il;
  long iil;             // zodpoveda long int 
  unsigned long int ilu;
  unsigned long iilu;   // zodpoveda unsigned long int
  float f;
  double d;
  long double ld;

  cout<<"sizeof(char) = " << sizeof(c) << endl;
  cout<<"sizeof(unsigned char) = " << sizeof(cu) << endl; 
  cout<<"sizeof(int) = " << sizeof(i) << endl;
  cout<<"sizeof(unsigned int) = " << sizeof(iu) << endl;
  cout<<"sizeof(short) = " << sizeof(is) << endl;
  cout<<"sizeof(unsigned short) = " << sizeof(isu) << endl;
  cout<<"sizeof(long) = " << sizeof(il) << endl;
  cout<<"sizeof(unsigned long) = " << sizeof(ilu) << endl;
  cout<<"sizeof(float) = " << sizeof(f) << endl;
  cout<<"sizeof(double) = " << sizeof(d) << endl;
  cout<<"sizeof(long double) = " << sizeof(ld) << endl;
}
Vzťah medzi veľkosťami premenných základných typov sa dá jednoducho znázorniť nasledujúco:

sizeof(char)<= sizeof(short)<= sizeof(int)<= sizeof(long)<= sizeof(float)<= sizeof(double)

Základné dátové typy je možné vo výrazoch a priradeniach ľubovolne kombinovať. Ak je to možné, kompilátor sa snaží konvertovať dátové typy tak, aby nedošlo k strate informácie. Sú ale prípady, keď informácia bude stratená alebo zmenená.

int i1 = 256+255;
char ch = i1;      // ch == 255
int i2 = ch;       // i2 == ?
Pri implicitných konverziách kompilátor negeneruje chybové hlásenia. Skúste nasledujúci príklad:
unsigned prekvapenie = -1;
cout << prekvapenie << endl;