Zdravím, začal jsem se učit C++ a celkem mě to baví. Jen mám hned z kraje trošku zmatek v číselných datových typech. Udělal jsem si následující výpis, abych zjistil kolik místa v paměti zabírají jednotlivé číselné datové typy a jaké je jejich rozmezí hodnot:
int main()
{
cout<<"==========================================================="<<endl;
cout<<"======================CELOCISELNE TYPY====================="<<endl;
cout<<"==========================================================="<<endl<<endl<<endl;
cout<<"===SHORT==="<<endl;
cout<<"Velikost: "<<sizeof(short) <<" bajtu"<<endl;
cout<<"Minimum: "<< SHRT_MIN<<endl;
cout<<"Maximum: "<<SHRT_MAX<<endl<<endl<<endl;
cout<<"===UNSIGNED SHORT==="<<endl;
cout<<"Velikost: "<<sizeof(unsigned short) <<" bajtu"<<endl;
cout<<"Minimum: "<< 0<<endl;
cout<<"Maximum: "<<USHRT_MAX<<endl<<endl<<endl<<endl<<endl;
cout<<"===INTEGER==="<<endl;
cout<<"Velikost: "<<sizeof(int) <<" bajtu"<<endl;
cout<<"Minimum: "<< INT_MIN<<endl;
cout<<"Maximum: "<<INT_MAX<<endl<<endl<<endl;
cout<<"===UNSIGNED INTEGER==="<<endl;
cout<<"Velikost: "<<sizeof(unsigned int) <<" bajtu"<<endl;
cout<<"Minimum: "<< 0<<endl;
cout<<"Maximum: "<<UINT_MAX<<endl<<endl<<endl<<endl<<endl;
cout<<"===LONG==="<<endl;
cout<<"Velikost: "<<sizeof(long) <<" bajtu"<<endl;
cout<<"Minimum: "<< LONG_MIN<<endl;
cout<<"Maximum: "<<LONG_MAX<<endl<<endl<<endl;
cout<<"===UNSIGNED LONG==="<<endl;
cout<<"Velikost: "<<sizeof(unsigned long) <<" bajtu"<<endl;
cout<<"Minimum: "<< 0<<endl;
cout<<"Maximum: "<<ULONG_MAX<<endl<<endl<<endl;
cout<<"==========================================================="<<endl;
cout<<"==============CISLA S PLOVOUCI DESETINOU CARKOU============"<<endl;
cout<<"==========================================================="<<endl<<endl<<endl;
cout<<"===FLOAT==="<<endl;
cout<<"Velikost: "<<sizeof(float) <<" bajtu"<<endl;
cout<<"Minimum: "<< FLT_MIN<<endl;
cout<<"Maximum: "<<FLT_MAX<<endl<<endl<<endl;
cout<<"===DOUBLE==="<<endl;
cout<<"Velikost: "<<sizeof(double) <<" bajtu"<<endl;
cout<<"Minimum: "<< DBL_MIN<<endl;
cout<<"Maximum: "<<DBL_MAX<<endl<<endl<<endl;
cout<<"===LONG DOUBLE==="<<endl;
cout<<"Velikost: "<<sizeof(long double) <<" bajtu"<<endl;
cout<<"Minimum: "<< LDBL_MIN<<endl;
cout<<"Maximum: "<<LDBL_MAX<<endl<<endl<<endl;
return 0;
}
Vím že se velikost a rozsah může na jednotlivých platformách lišit, ale na mém počítači jsem přišel na následující: typ integer zabírá v paměti stejně jako long, takže mají stejný rozsah (analogicky to platí i pro jejich unsigned verze) U čísel s plovoucí desetinnou čárkou má double stejný rozsah a velikost jako long double. Znamená to tedy, že např. u celočíselných typů nemá smysl používat long (protože pokud jsem správně pochopil, při výpočtech se stejně převede na integer pokud se do něj vejde) a u čísel s plovoucí desetinnou čárkou stačí používat jen float a double (long double nemá smysl)? To mi příjde divné, ale dle tohoto výpisu to tak vypadá. Byl bych vděčný buď za potvrzení mé úvahy a nebo o vyvedení z omylu a popostrčení :) Díky
|