Установка int в бесконечность в C++
У меня есть int a
, которое должно быть равно "бесконечности". Это означает, что если
int b = anyValue;
a>b
это всегда правда.
Есть ли какая-либо особенность C++, которая могла бы сделать это возможным?
6 ответов:
Целые числа по своей природе конечны. Самое близкое, что вы можете получить, это установить
a
вint
максимальное значение:#include <limits> // ... int a = std::numeric_limits<int>::max();
, который будет
2^31 - 1
(или2 147 483 647
), еслиint
имеет ширину 32 бита в вашей реализации.Если вам действительно нужна бесконечность, используйте тип чисел с плавающей точкой, например
float
илиdouble
. Затем вы можете получить бесконечность с помощью:double a = std::numeric_limits<double>::infinity();
Целые числа конечны, поэтому, к сожалению, вы не можете установить его в истинную бесконечность. Однако вы можете установить его на максимальное значение int, это будет означать, что он будет больше или равен любому другому int, т. е.:
a>=b
Всегда истинно.
Вы бы сделали это с помощью
#include <limits> //your code here int a = std::numeric_limits<int>::max(); //go off and lead a happy and productive life
Обычно это будет равно 2,147,483,647
Если вам действительно нужно истинное "бесконечное" значение, вам придется использовать double или float. Тогда вы можете просто сделать это
float a = std::numeric_limits<float>::infinity();
Дополнительные пояснения числовых пределов можно найти здесь
Счастливого Кодирования!
Примечание: Как упоминалось в WTP, если абсолютно необходимо иметь int, который является "бесконечным", вам придется написать класс-оболочку для int и перегрузить операторы сравнения, хотя это, вероятно, не обязательно для большинства проектов.
int
по своей сути конечна; нет ценности, которая удовлетворяла бы вашим требованиям.Если вы хотите изменить тип
b
, Вы можете сделать это с помощью переопределения операторов: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 }
Вы также можете использовать INT_MAX:
Http://www.cplusplus.com/reference/climits/
Это эквивалентно использованию numeric_limits.
Это сообщение для меня в будущем:
Просто используйте:
(unsigned)!((int)0)
Он создает максимально возможное число в любой машине, присваивая все биты 1s (единицам), а затем приводит его к unsigned
Еще лучше
#define INF (unsigned)!((int)0)
А затем просто используйте INF в своем коде
Int min и max значения
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
Я думаю, что вы можете установить a равным 9,223,372,036,854,775,807, но это должно быть int64
Если вы всегда хотите, чтобы a был теркой, то почему вы должны это проверять? просто установите, чтобы это было истинно всегда