Почему в C++ отличается static_cast<unsigned> от отрицательных чисел, если число постоянное или нет



casting (1)

Поведение вашей программы не определено : стандарт C ++ не определяет преобразование отрицательного типа с плавающей запятой в тип unsigned .

(Обратите внимание, что знакомое поведение обтекания применимо только к отрицательным целочисленным типам.)

Поэтому нет смысла пытаться объяснить результаты вашей программы.

Какие правила С ++ означают, что равно равно ложно ? Данный:

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