C++ में क्यों स्थिर संख्याओं का static_cast<unsign> भिन्न होता है यदि संख्या स्थिर है या नहीं



casting (1)

आपके प्रोग्राम का व्यवहार अपरिभाषित है : C ++ मानक एक नकारात्मक फ्लोटिंग पॉइंट प्रकार के एक unsigned प्रकार में रूपांतरण को परिभाषित नहीं करता है।

(ध्यान दें कि रैप-अराउंड व्यवहार केवल नकारात्मक अभिन्न प्रकारों पर लागू होता है।)

इसलिए आपके प्रोग्राम आउटपुट को समझाने के प्रयास में बहुत कम बिंदु हैं।

C ++ नियम क्या है जिसका मतलब है कि समान है? दिया हुआ:

float f {-1.0};
bool equal = (static_cast<unsigned>(f) == static_cast<unsigned>(-1.0));

जैसे https://godbolt.org/z/fcmx2P

#include <iostream>

int main() 
{
          float   f {-1.0};
    const float  cf {-1.0};

    std::cout << std::hex;
    std::cout << " f" << "=" << static_cast<unsigned>(f) << '\n';
    std::cout << "cf" << "=" << static_cast<unsigned>(cf) << '\n';

    return 0;
}

निम्नलिखित उत्पादन करता है:

 f=ffffffff
cf=0




casting