Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Problem mit Bit-Manipulation (https://www.delphipraxis.net/162902-problem-mit-bit-manipulation.html)

Panschi 9. Sep 2011 07:40

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:
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;
Hoffe es ist nicht ein allzu dummer fehler :-D

DeddyH 9. Sep 2011 07:42

AW: Problem mit Bit-Manipulation
 
Und was soll da jetzt falsch sein?

Panschi 9. Sep 2011 07:44

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

DeddyH 9. Sep 2011 07:46

AW: Problem mit Bit-Manipulation
 
Und was hast Du erwartet? Bekommst Du das gewünschte Ergebnis, wenn Du nicht integer, sondern Cardinal nimmst?

Panschi 9. Sep 2011 07:49

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?

DeddyH 9. Sep 2011 07:49

AW: Problem mit Bit-Manipulation
 
Und was ist mit den restlichen 28 Bit?

[edit] Nochmal zum Verständnis:
Code:
//integer = 32 Bit
00000000000000000000000000000100 // = 4
11111111111111111111111111111011 // = not 4
[/edit]

Panschi 9. Sep 2011 07:53

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

Panschi 9. Sep 2011 07:55

AW: Problem mit Bit-Manipulation
 
das wäre 16 777 211

DeddyH 9. Sep 2011 07:57

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]

Panschi 9. Sep 2011 08:00

AW: Problem mit Bit-Manipulation
 
2^31 = 2 147 483 648 :oops: okay


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:38 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz