निम्नलिखित कोड का संकलन:
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
?