c / expert
Snippet
IEEE 754 Gleitkomma-Bitmanipulation durch Type-Punned Unions
Type-Punning über C-Unions ermöglicht die Inspektion von Gleitkommadarstellungen auf Bit-Ebene, ohne Regeln zur strikten Aliasing-Verletzung auszulösen. Bitweise Verschiebungsoperationen zerlegen IEEE 754-Zahlen in Vorzeichen, exponentiellen Bias und Mantisse.
snippet.c
c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdint.h>#include <stdbool.h>typedef union {float f;uint32_t u;} FloatBits;bool extract_ieee754_components(float val, uint8_t *sign, uint8_t *exponent, uint32_t *mantissa) {FloatBits fb = { .f = val };*sign = (fb.u >> 31) & 0x01;*exponent = (fb.u >> 23) & 0xFF;*mantissa = fb.u & 0x7FFFFF;return (*exponent != 0xFF);}
Erklärung
1
typedef union { float f; uint32_t u; } FloatBits;
Definiert eine speicherüberlappende Union für regelkonformen C-Standard Bit-Zugriff.
2
FloatBits fb = { .f = val };
Initialisiert die Union mit einem float-Wert und bietet eine binäre Darstellung über das int-Mitglied.
3
*sign = (fb.u >> 31) & 0x01;
Extrahiert das Vorzeichenbit durch Verschiebung um 31 Positionen zur Isolierung des MSB.