Какие правила С ++ означают, что равно равно ложно ? Данный:
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
Ответы:
Поведение вашей программы не определено : стандарт C ++ не определяет преобразование отрицательного типа с плавающей запятой в
unsigned
тип.(Обратите внимание, что знакомое поведение обтекания применимо только к отрицательным целочисленным типам.)
Поэтому нет смысла пытаться объяснить результаты вашей программы.
источник
float
находится в пределах диапазонаint
.