Zmatek v číselných datových typech   zodpovězená otázka

C++/C

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

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ono ve specifikaci C++ je volně určené jaký mají mít rozsah. Například ten int má až 32 bitů, zatímco long má 32 až 64 bitů. Záleží jaký používáš překladač.

Pokud používáš microsoftí překladač, tak místo long používej long long, ten je 64 bitový. Jak je to s podporou v gcc netuším.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ano, máte pravdu - pokud velikost int je stejná jako velikost long int (4 bajty), pak v jejich použití není rozdíl, mají stejný rozsah hodnot (-2 147 483 648 až 2 147 483 647). Větší je ale pak long long int, ten už má 8 bajtů.

Jinak pod gcc jsem to také zkoušel, obdržel jsem naprosto stejné výsledky jako ve Visual Studiu.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

To jsem potřeboval vědět, děkuji za vysvětlení :)

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback