मेरे पास एक प्रोजेक्ट है जहां मैं बड़ी संख्या (एनएस-टाइमस्टैम्प) से निपटता हूं जो पूर्णांक में फिट नहीं होता है। इसलिए मैं उदाहरण का उपयोग करना चाहता हूँ int64_t और वर्तमान में एक टेस्ट केस लिख रहा हूं (हाँ!)।बड़े पूर्णांक मान की परिभाषा
बड़ी संख्या के लिए व्यवहार की जाँच करने के लिए, मैं
int64_t val = 2*std::numeric_limits<int>::max();
qDebug() << "long val" << val;
जो
long val -2
(एक ही रूप में यदि मैं पूर्णांक के रूप में वैल को परिभाषित) रिटर्न की तरह कुछ के साथ शुरू कर दिया।
लेकिन अगर मैं
int64_t val = std::numeric_limits<int>::max();
val *= 2;
qDebug() << "long val" << val;
बारे में मैं
long val 4294967294
जो सही लगती है मिलता है।
तो मेरे लिए ऐसा लगता है कि 2*max()
पहले पूर्णांक में संग्रहीत है (इस चरण में छंटनी हुई) और फिर int64
पर कॉपी की गई। ऐसा क्यों होता है? संकलक जानता है कि परिणाम int64
प्रकार है ताकि 2*max()
सीधे फिट हो।