निम्नलिखित कोड का संकलन:
double getDouble()
{
double value = 2147483649.0;
return value;
}
int main()
{
printf("INT_MAX: %u\n", INT_MAX);
printf("UINT_MAX: %u\n", UINT_MAX);
printf("Double value: %f\n", getDouble());
printf("Direct cast value: %u\n", (unsigned int) getDouble());
double d = getDouble();
printf("Indirect cast value: %u\n", (unsigned int) d);
return 0;
}
आउटपुट (MSVC x86):
INT_MAX: 2147483647
UINT_MAX: 4294967295
Double value: 2147483649.000000
Direct cast value: 2147483648
Indirect cast value: 2147483649
आउटपुट (MSVC x64):
INT_MAX: 2147483647
UINT_MAX: 4294967295
Double value: 2147483649.000000
Direct cast value: 2147483649
Indirect cast value: 2147483649
में माइक्रोसॉफ्ट प्रलेखन से रूपांतरण में अधिकतम मूल्य पूर्णांक पर हस्ताक्षर किए के लिए कोई जिक्र नहीं है doubleकरने के लिए unsigned int।
उपरोक्त सभी मानों को किसी फ़ंक्शन की वापसी के समय INT_MAXछोटा किया जा रहा 2147483648है।
मैं प्रोग्राम बनाने के लिए विजुअल स्टूडियो 2019 का उपयोग कर रहा हूं । यह gcc पर नहीं होता है ।
क्या मैं कुछ गलत कर रहा हूँ? वहाँ एक सुरक्षित तरीका है कन्वर्ट doubleकरने के लिए unsigned int?