AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

C++ Operator |= in Delphi

Ein Thema von Anthrox · begonnen am 22. Feb 2011 · letzter Beitrag vom 23. Feb 2011
Antwort Antwort
Anthrox

Registriert seit: 4. Feb 2010
14 Beiträge
 
Delphi XE Architect
 
#1

AW: C++ Operator |= in Delphi

  Alt 22. Feb 2011, 20:08
Na dann, vielen Dank euch beiden.
Aber eine Frage bleibt mir noch..
Wozu braucht man denn bei einer Zuweisung ein or?
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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.876 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: C++ Operator |= in Delphi

  Alt 22. Feb 2011, 20:14
Or ist eine Booleanoperator:

0 or 0 = 0
0 or 1 = 1
1 or 0 = 1
1 or 1 = 1
Markus Kinzler
  Mit Zitat antworten Zitat
Anthrox

Registriert seit: 4. Feb 2010
14 Beiträge
 
Delphi XE Architect
 
#3

AW: C++ Operator |= in Delphi

  Alt 22. Feb 2011, 20:29
Aber eine Frage bleibt mir noch..
Wozu braucht man denn bei einer Zuweisung ein or?
Weil du bspw. in der Variablen auf der linken Seite der Zuweisung ein Flag setzen willst.


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).

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
Also, was für ein Flag wird da gesetzt? (irgendwie habe ich das Gefühl ich verstehe etwas falsch^^)

Or ist eine Booleanoperator:

0 or 0 = 0
0 or 1 = 1
1 or 0 = 1
1 or 1 = 1
Viele Danke
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

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...
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

AW: C++ Operator |= in Delphi

  Alt 22. Feb 2011, 20:47
Jede Zahl liegt im Computer binär vor. Beispiel:
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.

Geändert von Namenloser (22. Feb 2011 um 20:58 Uhr)
  Mit Zitat antworten Zitat
Anthrox

Registriert seit: 4. Feb 2010
14 Beiträge
 
Delphi XE Architect
 
#5

AW: C++ Operator |= in Delphi

  Alt 22. Feb 2011, 20:54
Jede Zahl liegt im Computer binär vor. Beispiel:
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
Aber was das nützt ist mir noch immer schleierhaft
Denn schlussendlich erhält man ja einfach eine andere Zahl oder nicht?
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

AW: C++ Operator |= in Delphi

  Alt 22. Feb 2011, 21:04
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 OR 8 , weil 8 binär 00001000 ist. Auslesen geht dann umgekehrt mit and . Man gibt die Flags meist Hexadezimal an.
  Mit Zitat antworten Zitat
Anthrox

Registriert seit: 4. Feb 2010
14 Beiträge
 
Delphi XE Architect
 
#7

AW: C++ Operator |= in Delphi

  Alt 22. Feb 2011, 21:19
Sei mir nicht böse. Aber du schriebst:

Ich versuche gerade ein Tutorial (C++) für Hardware Breakpoint Hooks nachzuvollziehen. (Wen es interessiert: Link)
... und weißt nichts mit bitweisen und logischen Operatoren anzufangen? Das sind Grundlagen! Ich empfehle dir ganz stark ein Buch mit derlei Grundlagenwissen zu konsultieren.

Bevor man nämlich mit Registern rumspielt, sollte man wissen wie die CPU funktioniert (zumindest aus Software-Perspektive) und dazu muß man schon mindestens die genannten Operatoren beherrschen, sowie einige weitere ...
Naja, da hast du wohl recht
Ich habe mir auch schon überlegt ein gutes Buch zuzutun. (grässliches Wort )
Du hast nicht zufällig einen guten Vorschlag?
Ich habe ein Buch aber da sind eben nur die grundlagigsten Grundlagen drinne
Naja, wie gesagt wenn du 'nen Vorschlag hast, her damit!

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 OR 8 , weil 8 binär 00001000 ist. Auslesen geht dann umgekehrt mit and . Man gibt die Flags meist Hexadezimal an.
Und ich habe gar nicht gesehen dass du editiert hast
Also ist das sozusagen eine kompliziertere Version von einem booleschen Wert?
(beziehungsweise mehrere boolesche Werte)

Ich weiss ja nicht aber verstehst du rein zufällig wieso das bei dem Beispiel von vorher gemacht wird?
Delphi-Quellcode:
  //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;
$1 = 1b
$4 = 100b
sind wieder 100 binär richtig?

100b
10000b
sind wieder 10000 binär

10000b
1000000b
auch das sind wieder 1000000 binär

Wieso werden denn da nicht einfach die Werte zugewiesen, das ist ja gar nicht nötig wenn es wieder das gleiche gibt wie wenn man nichts macht
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#8

AW: C++ Operator |= in Delphi

  Alt 22. Feb 2011, 20:16
Aber eine Frage bleibt mir noch..
Wozu braucht man denn bei einer Zuweisung ein or?
Weil du bspw. in der Variablen auf der linken Seite der Zuweisung ein Flag setzen willst.


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).

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).
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:16 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