Was ist die C ++ Regeln, die Mittel gleich ist falsch ?. Gegeben:
float f {-1.0};
bool equal = (static_cast<unsigned>(f) == static_cast<unsigned>(-1.0));
ZB 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;
}
Erzeugt die folgende Ausgabe:
f=ffffffff
cf=0
Antworten:
Das Verhalten Ihres Programms ist undefiniert : Der C ++ - Standard definiert nicht die Konvertierung eines negativen Gleitkommatyps in einen
unsigned
Typ.(Beachten Sie, dass das bekannte Wrap-Around-Verhalten nur für negative Integraltypen gilt .)
Daher macht es wenig Sinn, zu versuchen, Ihre Programmausgabe zu erklären.
quelle
float
im Bereich von a liegtint
.