![]() |
Delphi-Version: 5
Problem mit Bit-Manipulation
Hallo Forum,
Ich bin gerade dabei ein Übungsprogramm zu schreiben um die Manipulation von Zahlen mit Hilfe der Bit-Befehle (OR, AND, XOR etc.) in Delphi umzusetzen und zu verstehen. Soweit klappen auch alle Befehle, nur beim NOT Befehl hab ich meine Schwierigkeiten. (Habe 2 Edit eingabefelder - EdtEingabe, EdtEingabe2 - und für jede Bit Operation einen Button) Hier mein Quelltext:
Delphi-Quellcode:
Hoffe es ist nicht ein allzu dummer fehler :-D
procedure TForm1.BtnClick(Sender: TObject);
var Ergebnis: Integer; hilfswert: Integer; begin Eingabe := StrToInt(EdtEingabe.Text); Eingabe2 := StrToInt(EdtEingabe2.Text); if Sender = BtnNot then begin Ergebnis := NOT Eingabe; //????? LblErgebnis.Caption := IntToStr(Ergebnis); end; if Sender = BtnAnd then begin Ergebnis := eingabe AND eingabe2; LblErgebnis.Caption := IntToStr(Ergebnis); end; if Sender = BtnOR then begin Ergebnis := Eingabe OR Eingabe2; LblErgebnis.Caption := IntToStr(Ergebnis); end; if Sender = BtnXOR then begin Ergebnis := Eingabe XOR Eingabe2; LblErgebnis.Caption := IntToStr(Ergebnis); end; if Sender = BtnShl then begin hilfswert := StrToInt(InputBox('SHL', 'Geben sie einen Wert für die SHL Funktion ein', '2')); Ergebnis := Eingabe SHL hilfswert; LblErgebnis.Caption := IntToStr(Ergebnis); EdtEingabe2.Text := '0'; end; if Sender = BtnShr then begin hilfswert := StrToInt(InputBox('SHR', 'Geben sie einen Wert für die SHR Funktion ein', '2')); Ergebnis := Eingabe SHR hilfswert; LblErgebnis.Caption := IntToStr(Ergebnis); EdtEingabe2.Text := '0'; end; end; |
AW: Problem mit Bit-Manipulation
Und was soll da jetzt falsch sein?
|
AW: Problem mit Bit-Manipulation
Bei dem NOT befehl gibt er mir die Eingabe um 1 erhöht nur negativ aus
Quasi Eignabe: 4 Ausgabe: -5 |
AW: Problem mit Bit-Manipulation
Und was hast Du erwartet? Bekommst Du das gewünschte Ergebnis, wenn Du nicht integer, sondern Cardinal nimmst?
|
AW: Problem mit Bit-Manipulation
Cardinal bewirkt das gleiche Ergebnis...
Aber wenn ich das richtig verstanden habe, dann müsste bei 4 (also 0100), 11 (1011) herauskommen oder? |
AW: Problem mit Bit-Manipulation
Und was ist mit den restlichen 28 Bit?
[edit] Nochmal zum Verständnis:
Code:
[/edit]
//integer = 32 Bit
00000000000000000000000000000100 // = 4 11111111111111111111111111111011 // = not 4 |
AW: Problem mit Bit-Manipulation
hm... dann wäre die 4 ja 0000 0000 0000 0000 0000 0000 0000 0100 und bei NOT würde dann 1111 1111 1111 1111 1111 1111 1111 1011 herausbekommen... das wäre dann ja doch ein bisschen größer als erwartet
|
AW: Problem mit Bit-Manipulation
das wäre 16 777 211
|
AW: Problem mit Bit-Manipulation
Sicher?
[edit] Du musst Dich schon auf den gewünschten Zahlenbereich einschränken, indem Du entweder einen anderen Datentyp nimmst oder mit einer Konstanten ver"and"est. [/edit] |
AW: Problem mit Bit-Manipulation
2^31 = 2 147 483 648 :oops: okay
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz