मेरे पास int a"अनंत" के बराबर होने की आवश्यकता है। इसका मतलब है कि अगर
int b = anyValue;
a>b हमेशा सच होता है।
क्या C ++ की कोई विशेषता है जो इसे संभव बना सकती है?
Max Valueभाषा का कार्यान्वयन।
a>bकी जांच :)
मेरे पास int a"अनंत" के बराबर होने की आवश्यकता है। इसका मतलब है कि अगर
int b = anyValue;
a>b हमेशा सच होता है।
क्या C ++ की कोई विशेषता है जो इसे संभव बना सकती है?
Max Valueभाषा का कार्यान्वयन।
a>bकी जांच :)
जवाबों:
इंटेगर स्वाभाविक रूप से परिमित हैं। निकटतम आप प्राप्त कर सकते हैं की स्थापना कर रहा है 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 के अधिकतम मान पर सेट कर सकते हैं, इसका मतलब यह होगा कि यह किसी भी अन्य 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 के बराबर होगा
यदि आपको वास्तव में एक "अनंत" मूल्य की आवश्यकता है, तो आपको एक डबल या फ्लोट का उपयोग करना होगा। तो आप बस यह कर सकते हैं
float a = std::numeric_limits<float>::infinity();
संख्यात्मक सीमाओं के अतिरिक्त स्पष्टीकरण यहां देखे जा सकते हैं
हैप्पी कोडिंग!
नोट: जैसा कि WTP ने उल्लेख किया है, अगर "int" का एक इंट होना आवश्यक है, तो आपको एक int के लिए एक रैपर क्लास लिखना होगा और तुलना ऑपरेटरों को ओवरलोड करना होगा, हालांकि यह संभवतः अधिकांश परियोजनाओं के लिए आवश्यक नहीं है।
max()या infinity()एक ऐसे टेम्पलेट में जहां संख्यात्मक प्रकार अज्ञात है, तो आपको +/-infinity()iff std::numeric_limits<T>::has_infinityऔर अन्यथा का उपयोग करने की आवश्यकता होगी min()औरmax()
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
}
std::numeric_limits<float>::infinity()।
यह भविष्य में मेरे लिए एक संदेश है:
महज प्रयोग करें: (unsigned)!((int)0)
यह किसी भी मशीन में 1s (वाले) को सभी बिट्स असाइन करके सबसे बड़ी संभव संख्या बनाता है और फिर इसे अहस्ताक्षरित कर देता है
और भी बेहतर
#define INF (unsigned)!((int)0)
और फिर बस अपने कोड में INF का उपयोग करें
#define INF ((unsigned) ~0), यहां देखें ।
आप INT_MAX का भी उपयोग कर सकते हैं:
http://www.cplusplus.com/reference/climits/
यह num_limits का उपयोग करने के बराबर है।
int न्यूनतम और अधिकतम मान
इंट -2,147,483,648 / 2,147,483,647 इंट 64 -9,223,372,036,854,775,808 / 9,223,372,036,854,775,807
मुझे लगता है कि आप 9,223,372,036,854,775,807 के बराबर सेट कर सकते हैं, लेकिन इसके लिए एक int64 होना चाहिए
यदि आप हमेशा चाहते हैं कि ग्रेटर बी हो तो आपको इसकी जांच करने की आवश्यकता क्यों है? बस इसे हमेशा सच होने के लिए सेट करें
cstdint)।
int C ++ का अर्थ और संबंधित प्रकार बताता है।
floats का उपयोग कर सकते हैं , जिसमें एक मूल्य है जो अनंत का प्रतिनिधित्व करता है।