Einfach Single wie gewünscht nach Integer/Cardinal/LongInt/LongUInt/LongWord casten, bzw. Double nach Int64/UInt64/TLageInteger und dann beliebige Binäroperationen, wie z.B. SHR bzw. AND.
Oder in ein BitField casten, wie TIntegerSet,
set of 0..31
bzw.
set of 0..63
.
Oder ganz einfach, die Funktionen der Helper-Records ala
TSingleRec nutzen,
oder noch besser die neueren Record-Helper ala
TSingleHelper.
Delphi-Quellcode:
var
F: Single;
L: LongUInt;
i := LongInt(F);
S := Odd(i shr 31);
S := i shr 31 and $1 <> 0;
S := i and $80000000 <> 0;
S := i and (1 shl 31) <> 0;
...
Delphi-Quellcode:
var F: Single;
F := 123.456;
E := TSingleRec(F).Exp;
F := TSingleRec(F).Frac;
S := TSingleRec(F).Sign;
E := TSingleRec(F).Exponent;
M := TSingleRec(F).Mantissa;
S := TSingleRec(F).Sign;
B1 := TSingleRec(F).Bytes[0];
B2 := TSingleRec(F).Bytes[1];
...
S := TSingleRec(F).Bytes[3] and $80 <> 0;
Delphi-Quellcode:
uses SysUtils;
var F: Single;
F := 123.456;
E := F.Exp;
F := F.Frac;
S := F.Sign;
E := F.Exponent;
M := F.Mantissa;
S := F.Sign;
B1 := F.Bytes[0];
B2 := F.Bytes[1];
...
S := F.Bytes[3] and $80 <> 0;
https://en.wikipedia.org/wiki/IEEE_754
https://de.wikipedia.org/wiki/IEEE_754