Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   C++ Operator |= in Delphi (https://www.delphipraxis.net/158571-c-operator-%7C%3D-delphi.html)

Anthrox 22. Feb 2011 16:58

C++ Operator |= in Delphi
 
Liebe DP!
Erstmal, ich bin mir nicht ganz sicher ob ich jetzt das richtige Forum erwischt habe aber diese Frage schien mir sonst nirgends besser zu passen :stupid:

Also dann zu meinem Problem:

Ich versuche gerade ein Tutorial (C++) für Hardware Breakpoint Hooks nachzuvollziehen. (Wen es interessiert: Link)
Das ganze ging auch relativ gut aber nun bin ich hier stecken geblieben:
Code:
// Erster HW BP
ctx.Dr0 = 0xADRESSE1;
ctx.Dr7 = 0x00000001;

// Zweiter HW BP
ctx.Dr1 = 0xADRESSE2;
ctx.Dr7 |= 0x00000004;

[..]
Code:
ctx.Dr7 |= 0x00000004;
Das hier verstehe ich nicht wirklich.
Ich habe mal gegoogelt

Zitat:

Kombinierte Zuweisungsoperatoren

Die kombinierten Zuweisungsoperatoren kombinieren den Zuweisungsoperator (=) mit einem anderen Operator:
[..]
  • |=
Dabei wird der linke Operator sowohl als linker Operator für die Zuweisung als auch für den anderen Operator verwendet.
Wie das beispielsweise mit += funktioniert verstehe ich :-D
Aber ich begreife einfach nicht wie ein or (|) mit einem = verknüpft werden kann.
Weiss da jemand von euch Rat?

Liebe Grüsse Anthrox

Assarbad 22. Feb 2011 17:01

AW: C++ Operator |= in Delphi
 
Delphi-Quellcode:
ctx.Dr1 := ctx.Dr1 or $ADRESSE2;

Hinweis: in Delphi gibt es keine Unterscheidung zwischen bitweisen (|, &) und logischen (||, &&) Operatoren wie in C-Sprachen.

Namenloser 22. Feb 2011 17:02

AW: C++ Operator |= in Delphi
 
Delphi-Quellcode:
a += b
ist eine Kurzform für
Delphi-Quellcode:
a = a+b

Delphi-Quellcode:
a -= b
ist eine Kurzform für
Delphi-Quellcode:
a = a-b

Delphi-Quellcode:
a *= b
ist eine Kurzform für
Delphi-Quellcode:
a = a*b

Delphi-Quellcode:
a /= b
ist eine Kurzform für
Delphi-Quellcode:
a = a/b

usw...
dementsprechend ist
Delphi-Quellcode:
a |= b
ist eine Kurzform für
Delphi-Quellcode:
a = a | b
, also in Delphi:
Delphi-Quellcode:
a := a or b
.

Anthrox 22. Feb 2011 20:08

AW: C++ Operator |= in Delphi
 
Na dann, vielen Dank euch beiden.
Aber eine Frage bleibt mir noch..
Wozu braucht man denn bei einer Zuweisung ein or? :gruebel:
Ich verstehe ja dass das ganz nützlich sein kann bei einer if-Abfrage aber ich sehe den Sinn bei einer Zuweisung irgendwie nicht.
Welcher von den beiden Werten wird denn schlussendlich geschrieben? Beziehungsweise, wie funktioniert dieser Operator bei einer Zuweisung überhaupt?

lg Anthrox

mkinzler 22. Feb 2011 20:14

AW: C++ Operator |= in Delphi
 
Or ist eine Booleanoperator:

0 or 0 = 0
0 or 1 = 1
1 or 0 = 1
1 or 1 = 1

Assarbad 22. Feb 2011 20:16

AW: C++ Operator |= in Delphi
 
Zitat:

Zitat von Anthrox (Beitrag 1083658)
Aber eine Frage bleibt mir noch..
Wozu braucht man denn bei einer Zuweisung ein or? :gruebel:

Weil du bspw. in der Variablen auf der linken Seite der Zuweisung ein Flag setzen willst.


Zitat:

Zitat von Anthrox (Beitrag 1083658)
Ich verstehe ja dass das ganz nützlich sein kann bei einer if-Abfrage aber ich sehe den Sinn bei einer Zuweisung irgendwie nicht.

Bei einem if dann aber ohne Zuweisung ;) (üblicherweise).

Zitat:

Zitat von Anthrox (Beitrag 1083658)
Welcher von den beiden Werten wird denn schlussendlich geschrieben? Beziehungsweise, wie funktioniert dieser Operator bei einer Zuweisung überhaupt?

Siehe oben von NamenLozer.

Beispiel
Code:
// a ist eine Variable
// b ist eine Konstante
a |= b;
... a enthält nun die bitweise Kombination aus (a or b).

Anthrox 22. Feb 2011 20:29

AW: C++ Operator |= in Delphi
 
Zitat:

Zitat von Assarbad (Beitrag 1083662)
Zitat:

Zitat von Anthrox (Beitrag 1083658)
Aber eine Frage bleibt mir noch..
Wozu braucht man denn bei einer Zuweisung ein or? :gruebel:

Weil du bspw. in der Variablen auf der linken Seite der Zuweisung ein Flag setzen willst.


Zitat:

Zitat von Anthrox (Beitrag 1083658)
Ich verstehe ja dass das ganz nützlich sein kann bei einer if-Abfrage aber ich sehe den Sinn bei einer Zuweisung irgendwie nicht.

Bei einem if dann aber ohne Zuweisung ;) (üblicherweise).

Zitat:

Zitat von Anthrox (Beitrag 1083658)
Welcher von den beiden Werten wird denn schlussendlich geschrieben? Beziehungsweise, wie funktioniert dieser Operator bei einer Zuweisung überhaupt?

Siehe oben von NamenLozer.

Beispiel
Code:
// a ist eine Variable
// b ist eine Konstante
a |= b;
... a enthält nun die bitweise Kombination aus (a or b).

Wenn ich ehrlich bin verstehe ich das nicht so ganz :oops:
Also, was für ein Flag wird da gesetzt? (irgendwie habe ich das Gefühl ich verstehe etwas falsch^^)

Zitat:

Zitat von mkinzler (Beitrag 1083661)
Or ist eine Booleanoperator:

0 or 0 = 0
0 or 1 = 1
1 or 0 = 1
1 or 1 = 1

Viele Danke :-D
Aber wie wäre dann das mit anderen Zahlen wie zum Beispiel
55 or 99
Mit 0 und 1 verstehe ich das ja.
Nur mit anderen Zahlen ist mir das ein Rätsel :gruebel:

Code:
  //HW BP Nummer 1//
  ctx.Dr0:= $ADDRESSE1;
  ctx.Dr7:= $00000001;
  //HW BP Nummer 2//
  ctx.Dr1:= $ADDRESSE2;
  ctx.Dr7:= ctx.Dr7 or $00000004;
  //HW BP Nummer 3//
  ctx.Dr2:= $ADDRESSE3;
  ctx.Dr7:= ctx.Dr7 or $00000010;
  //HW BP Nummer 4//
  ctx.Dr3:= $ADDRESSE4;
  ctx.Dr7:= ctx.Dr7 or 00000040;
Anhand dieses Beispiels, wieso macht man das?
Irgendwie will sich mir der Sinn davon nicht erschliessen...

Namenloser 22. Feb 2011 20:47

AW: C++ Operator |= in Delphi
 
Jede Zahl liegt im Computer binär vor. Beispiel:
Delphi-Quellcode:
3 or 9 = (00000011b or 00001001b) = (00001011b) = 11
[ADD]
Oder um bei deinem Beispiel zu bleiben:
Code:
      Dez. . Bin.
...   55     00110111
or... 99     01100011
=    119     01110111
Sry für die Füllzeichen (. und _), die Einrückung im Code-Block ist immer noch kaputt.

Anthrox 22. Feb 2011 20:54

AW: C++ Operator |= in Delphi
 
Zitat:

Zitat von NamenLozer (Beitrag 1083673)
Jede Zahl liegt im Computer binär vor. Beispiel:
Delphi-Quellcode:
3 or 9 = (00000011b or 00001001b) = (00001011b) = 11

Ahhhhhhhhhhhhh!
Code:
00000011
00001001
--------
00001011
Also so? Jede Ziffer wird einzeln verglichen und dann abgeändert?
Jetzt verstehe ich es :thumb:
Aber was das nützt ist mir noch immer schleierhaft :cry:
Denn schlussendlich erhält man ja einfach eine andere Zahl oder nicht?

Namenloser 22. Feb 2011 21:04

AW: C++ Operator |= in Delphi
 
Ja, genau so, hab deinen neuen Beitrag beim Editieren nicht gesehn.

Zum Nutzen: Man kann das verwenden, um in jedem Bit ein Boolean zu speichern, also insgesamt 8 Pro Byte. Das wird gern in Sprachen wie C genutzt, die keinen nativen Set-Datentyp haben wie Delphi. Man verwendet dann Zweierpotenzen als Maske zum Auslesen und Setzen der einzelnen Bits.

Wenn ich z.B. das 4 Bit von rechts setzen will, rechne ich einfach
Delphi-Quellcode:
OR 8
, weil 8 binär 00001000 ist. Auslesen geht dann umgekehrt mit
Delphi-Quellcode:
and
. Man gibt die Flags meist Hexadezimal an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:13 Uhr.
Seite 1 von 2  1 2      

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