Opérations au niveau du bit sur les nombres à virgule flottante
Les opérations au niveau du bit en C/C manipulent la représentation de la valeur d'un nombre, et non sa valeur réelle. Cependant, les nombres à virgule flottante n'ont pas de représentation définie au niveau des bits dans le langage.
Erreur du compilateur : & l'opérande n'est pas flottant
Votre tentative d'effectuer un ET au niveau du bit (&) L'opération sur une variable float, a, échoue car "& l'opérande nécessite un type entier et ne peut pas être appliqué à un float. La conversion de a en un entier, par exemple, int a = (int) 1.4123;, permet l'opération mais effectue le AND au niveau du bit sur la représentation entière du nombre arrondi.
int to void Cast vs float to void Cast
Les entiers peuvent être convertis en void* car ils représentent des valeurs en mémoire "brutes", d'un autre côté, n'ont pas de représentation de bits sous-jacente bien définie. Par conséquent, ils ne peuvent pas être convertis de manière fiable en void*.
Analyse du contenu de bits à virgule flottante
Pour analyser le contenu en bits d'un nombre à virgule flottante, vous pouvez utiliser une union pour fusionner le flottant avec un type de représentation prenant en charge opérations :union { float f_value; unsigned int u_value; } number; number.f_value = 1.4123; unsigned int bitmask = (1 << 3); number.u_value &= bitmask; // Perform bitwise AND on the integer representation
float f = 5.0; unsigned char *c = reinterpret_cast<unsigned char *>(&f); // Inspect bit content from c[0] to c[sizeof(f) - 1]
Conclusion
Les opérations au niveau du bit ne peuvent pas être effectuées directement sur des nombres à virgule flottante car ils n'ont pas de représentation définie au niveau des bits. Au lieu de cela, vous pouvez analyser le contenu en bits de la mémoire sous-jacente à l'aide de méthodes telles que les unions ou la réinterprétation.Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!