Snad nevadí, že mám další otázku.. v C++ jsem napsal tento jednoduchý program:
# include <iostream>
# include <climits>
int main()
{
int a;
std::cin >> a;
if(a > INT_MAX || a < INT_MIN)
return 1;
else
return 0;
}
podobný program jsem psal i v C a taky nedělal to, co pravděpodobně všichni odhadnete, že bych chtěl. pokud uživatel zadá číslo, které je mimo rozsah INT, pak vrátí 1, jinak vrací 0. problém je ten, že ať zadám jakékoliv číslo, vždy program vrací 0... asi tuším, čím to je, ale nevím jak program upravit aby pracoval jak má.
myslím si, že je to tím, že číslo INT_MAX je (zjednodušeně) třeba 1111 . Pokud zadám nějaké větší číslo, tak je třeba
10111, ovšem počítač pracuje pouze s 0111 a to porovná s 1111. nevím jestli to chápu dobře, ale tak si to vysvětluji já. a netuším jak bych to měl opravit. za každou radu bych byl moc rád
Fórum › C / C++
INT_MAX použití v programu
INT_MAX je najvecsie mozne cislo ktore sa zmesti do typu int, takze premenna a bude bud mensia alebo rovna INT_MAX a vecsia alebo rovna INT_MIN. Takze ta podmienka bude vzdy vyhodnotena ako false.
edit:
mozes cislo nacitat ako string a potom ho previest na cislo, pri prevode lahko zistis ci je moc velke.
Ak mas kniznicu boost, tak mozes pouzit toto:
#include <boost/lexical_cast.hpp>
try {
int x = boost::lexical_cast<int>( "123" );
} catch( boost::bad_lexical_cast const& ) {
std::cout << "Error: input string was not valid" << std::endl;
}
ked sa do int-u pokusis dat moc velke cislo tak nastanie pretecenie(overwlow), viac tu: http://en.wikipedia.org/wiki/Integer_overflow
# include <iostream>
# include <climits>
int main()
{
using namespace std;
cout << "zadejte cislo int: ";
double x;
cin >> x;
if(x > INT_MAX || x < INT_MIN)
return 1;
cout << "ano, cislo " << int(x) << " je int" << endl;
return 0;
}
mam otazku... v tomto pripade, je toto pretypovani mozne nebo ne? osetril jsem ze cislo je ve spravnem rozsahu, takze se do typu int vejde, nebo ne? potom bych mohl dale s promennou x pracovat jako s int. Ale nevim jestli je to takto funkcni musim to zkusit
edit: opravil jsem hroznou chybu kde sem mel jen int main bez zavorek
#7 vitamin
Není pravda - double je číslo s plovoucí destinnou čárkou - tzn. je uloženo jako několik platných číslic a mantisa (řád). Tzn. do double klidně uložíš číslo 10^24. Ale číslo 12345678912345678912346789 do double už bez ztráty přesnosti neuložíš.
Ja som to presne nepocital, len som vyskusal int32 prekonvertovat na float a spet na int32 a neslo to spravne. int64 na double podobne. Toto: sizeof(int) < sizeof(double) som myslel len ako nutnu podmienku
Skusal som to na tomto:
cout << numeric_limits<int64_t>::max() << " ?= " << (int64_t)(double)numeric_limits<int64_t>::max() << endl;
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
C# - pouziti += — založil aleskm
Použití GUI — založil Nicolas
Pouziti ICloneable — založil alp
Použití dll v C — založil etrix
Pouziti siforvani v C++ — založil Holek
Moderátoři diskuze