Quelles sont les règles C ++ qui signifient que l' égalité est fausse ?. Donné:
float f {-1.0};
bool equal = (static_cast<unsigned>(f) == static_cast<unsigned>(-1.0));
Par exemple 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;
}
Produit la sortie suivante:
f=ffffffff
cf=0
Réponses:
Le comportement de votre programme n'est pas défini : le standard C ++ ne définit pas la conversion d'un type à virgule flottante négatif à en un
unsigned
type.(Notez que le comportement de bouclage familier ne s'applique qu'aux négatifs types intégraux .)
Il est donc inutile de tenter d'expliquer la sortie de votre programme.
la source
float
est dans la plage d'unint
.