Integer ist ein Variablentyp mit Vorzeichen (d.h. Plus/Minus). Das Vorzeichen wird meiner Kenntnis nach mit einem Bit gegenzeichnet, d. h. ist das erst Bit, von links gesehen, eine 0, dann ist die Zahl positiv. Ist es eine 1, ist die Zahl negativ. Für den Wert sind von den 32 Bit eines Integers nur 31 Bit nutzbar. Das 32'ste Bit ist für das Vorzeichen.
Das wollte ich mal überprüfen und habe den Code geschrieben. Allerdings ist das erste Bit immer eine 0, egal was für ein Wert ich nehme, positiv oder negativ. Wo liegt mein Fehler?
Delphi-Quellcode:
function BitAtPos(BitPos: Byte): Integer;
begin
Result := 0;
if (BitPos <= (SizeOf(Integer) * 8)) and (BitPos > 0) then
Result := Integer(1) shl (BitPos - 1);
end;
//Liefert einen Binär-String aus 0 und 1 im Wert von Integer zurück.
function IntToBinStr(Int: Integer): string;
const
b: array[Boolean] of Char = ('0', '1');
var
i: Integer;
begin
Result := '';
for i := 1 to (SizeOf(Int) * 8) do
Result := b[(Int and BitAtPos(i)) > 0] + Result;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToBinStr(-214748364));
end;