Apa C ++ aturan yang berarti sama adalah palsu ?. Diberikan:
float f {-1.0};
bool equal = (static_cast<unsigned>(f) == static_cast<unsigned>(-1.0));
Misalnya 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;
}
Menghasilkan output berikut:
f=ffffffff
cf=0
Jawaban:
Perilaku program Anda tidak terdefinisi : standar C ++ tidak mendefinisikan konversi tipe floating point negatif ke suatu
unsigned
tipe.(Perhatikan perilaku lilitan yang sudah dikenal hanya berlaku untuk tipe integral negatif .)
Jadi karena itu ada gunanya mencoba menjelaskan output program Anda.
sumber
float
berada dalam kisaran suatuint
.