Ik heb een int a
die gelijk moet zijn aan “oneindig”. Dit betekent dat als
int b = anyValue;
a>b
is altijd waar.
Is er een functie van C++ die dit mogelijk maakt?
Antwoord 1, autoriteit 100%
Gehele getallen zijn inherent eindig. U kunt het dichtst in de buurt komen door a
in te stellen op de maximale waarde van int
:
#include <limits>
// ...
int a = std::numeric_limits<int>::max();
Dat zou 2^31 - 1
(of 2 147 483 647
) zijn als int
32 bits breed is in uw implementatie.
Als je echtoneindig nodig hebt, gebruik dan een getaltype met drijvende komma, zoals float
of double
. Je kunt dan oneindig krijgen met:
double a = std::numeric_limits<double>::infinity();
Antwoord 2, autoriteit 49%
Gehele getallen zijn eindig, dus je kunt het helaas niet op echt oneindig hebben ingesteld.
U kunt het echter instellen op de maximale waarde van een int, dit zou betekenen dat deze groter of gelijk is aan elke andere int, dat wil zeggen:
a>=b
is altijd waar.
U zou dit doen door
#include <limits>
//your code here
int a = std::numeric_limits<int>::max();
//go off and lead a happy and productive life
Dit is normaal gesproken gelijk aan 2.147.483.647
Als je echt een echte “oneindige” waarde nodig hebt, zou je een double of een float moeten gebruiken. Dan kunt u dit eenvoudig doen
float a = std::numeric_limits<float>::infinity();
Aanvullende uitleg van numerieke limieten vindt u hier
Veel plezier met coderen!
Opmerking: zoals WTP al zei, als het absoluut noodzakelijk is om een int te hebben die “oneindig” is, zou je een wrapper-klasse voor een int moeten schrijven en de vergelijkingsoperatoren moeten overbelasten, hoewel dit waarschijnlijk niet nodig is voor de meeste projecten.
Antwoord 3, autoriteit 9%
int
is inherent eindig; er is geen waarde die aan uw eisen voldoet.
Als u echter bereid bent het type b
te wijzigen, kunt u dit doen met operatoroverschrijvingen:
class infinitytype {};
template<typename T>
bool operator>(const T &, const infinitytype &) {
return false;
}
template<typename T>
bool operator<(const T &, const infinitytype &) {
return true;
}
bool operator<(const infinitytype &, const infinitytype &) {
return false;
}
bool operator>(const infinitytype &, const infinitytype &) {
return false;
}
// add operator==, operator!=, operator>=, operator<=...
int main() {
std::cout << ( INT_MAX < infinitytype() ); // true
}
Antwoord 4, autoriteit 5%
Dit is een bericht voor mij in de toekomst:
Gebruik gewoon: (unsigned)!((int)0)
Het creëert het grootst mogelijke getal in elke machine door alle bits toe te wijzen aan enen (enen) en vervolgens te casten naar niet-ondertekend
Nog beter
#define INF (unsigned)!((int)0)
En gebruik dan gewoon INF in je code
Antwoord 5, Autoriteit 4%
U kunt ook int_max gebruiken:
http://www.cplusplus.com/reference/climits/
Het is equivalent aan het gebruik van Numeric_Limits.
Antwoord 6
INT MIN EN MAX-waarden
int-2.147,483,648 / 2.147,483,647
Int 64 -9,223,372,036,854,775,808 / 9,223,372,036,854,775,807
Ik denk dat je een tot gelijke 9.223.375.036.854.775.807 zou kunnen instellen, maar het zou een int64
moeten zijn
Als u altijd wilt om rasp te zijn, waarom moet u het controleren? Zet het gewoon om altijd waar te zijn