Quais são as regras do C ++ que significam igual é falso ? Dado:
float f {-1.0};
bool equal = (static_cast<unsigned>(f) == static_cast<unsigned>(-1.0));
Por exemplo, 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;
}
Produz a seguinte saída:
f=ffffffff
cf=0
Respostas:
O comportamento do seu programa é indefinido : o padrão C ++ não define a conversão de um tipo de ponto flutuante negativo em um
unsigned
tipo.(Observe que o comportamento familiar envolvente se aplica apenas a tipos integrais negativos .)
Portanto, há pouco sentido em tentar explicar a saída do seu programa.
fonte
float
estiver dentro do intervalo de umint
.