У меня есть int a
, который должен быть равен "бесконечности". Это означает, что если
int b = anyValue;
a>b
всегда истинно.
Есть ли какая-либо особенность С++, которая могла бы сделать это возможным?
У меня есть int a
, который должен быть равен "бесконечности". Это означает, что если
int b = anyValue;
a>b
всегда истинно.
Есть ли какая-либо особенность С++, которая могла бы сделать это возможным?
Целые конечны, так что, к сожалению, вы не можете установить его в истинную бесконечность. Однако вы можете установить его на максимальное значение 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 и перегрузить операторы сравнения, хотя это, вероятно, не обязательно для большинства проектов.
Целые по сути являются конечными. Самое близкое, что вы можете получить, - это установить 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
по своей сути является конечным; нет значения, которое удовлетворяет вашим требованиям.
Если вы хотите изменить тип 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/
это эквивалентно использованию числовых_лимитов.
Это сообщение для меня в будущем:
Просто используйте: (Без знака)! ((ИНТ) 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
если вы всегда хотите, чтобы это было больно, и почему вы должны его проверить? просто установите его всегда true