Considere el siguiente programa C++ y prediga la salida.
#include <iostream> using namespace std; int main() { float f = 0xffffffff; unsigned int x = 0xffffffff; // Value 4294967295 if (f == x) cout << "true"; else cout << "false"; return 0; }
El resultado del programa anterior es falso si el compilador utiliza el » tipo flotante simple IEEE754 de 32 bits «. Si definimos:
float f = 0xffffffff;
Básicamente, estamos tratando de asignar un número entero de 32 bits (con o sin signo) a un flotante de 32 bits. El compilador primero convertirá el entero 0xffffffff al flotante de 32 bits más cercano, y la representación de memoria del flotante f no es la misma que el entero 0xffffffff. Podemos ver los valores anteriores imprimiendo f y x.
#include <iostream> using namespace std; int main() { float f = 0xffffffff; unsigned int x = 0xffffffff; cout << "f = " << f << endl; cout << "x = " << x << endl; return 0; }
Producción :
f = 4.29497e+09 x = 4294967295
Incluso si copiamos la memoria directamente, por ejemplo, tenemos un número entero (valor igual a 0xffffffff), y copiamos sobre el contenido (valores de la memoria). Dado que 0xffffffff en IEEE754 no es un número flotante válido, si compara esta representación no válida consigo misma, no es igual.
unsigned int x = 0xffffffff; memoryCopy(&f, &x, sizeof(x));
Este artículo es una contribución de Rishav Raj . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA