Re: Bitweise Operatoren
Moin Glühwürmchen,
ich würde Dir allerdings empfehlen bei solchen Abfragen auf <> 0 zu testen, da das Ergebnis theoretisch auch negativ sein kein. (auch wenn das für Deinen konkreten Fall nicht zutrifft. |
Re: Bitweise Operatoren
Hm,
welches Wort (AND, OR,...) entspricht denn einem + und einem -? Was ich fragen will ist z. B. aus der MSDN heraus. Wann weis ich eigentlich wann ich mehrere z. B. dwNotifyFilter bei ReadDirectoryChangesW verbinden kann kann mit Or? |
Re: Bitweise Operatoren
Moin Mackhack,
mit OR fügst Du Bitwerte zusammen, und mit AND kannst Du dann die Bits testen. Bei Bitfeldern niemals mit + oder - arbeiten, da dies ungültige Werte erzeugen kann, die dann zu unverhersagbaren Ergebnissen führen können. Zitat:
Beispiel: Zitat:
|
Re: Bitweise Operatoren
Zitat:
x = a - b entspricht x = a and not b Zitat:
greetz Mike |
Re: Bitweise Operatoren
Ah dank euch beiden
|
Re: Bitweise Operatoren
Moin Mackhack,
umgang mit Bitfeldern allgemein, am Beispiel des Feldes Style aus CreateWindow, bzw. GetWindowLong, um den Wert auszulesen: (Das Beispiel erhebt nicht den Anspruch sinnvoll zu sein ;-))
Delphi-Quellcode:
Wichtig:
var
dwStyle : DWORD; begin // Windowstyle (siehe CreateWindow) des durch Handle angegebenen Fensters auslesen dwStyle := GetWindowLong(Handle,GWL_STYLE); // Den Style WS_CAPTION hinzufügen, egal, ob dieser schon enthalten ist oder nicht dwStyle := dwStyle OR WS_CAPTION; // Alle Bits Löschen, die für den Style WS_DISABLED zuständig sind // Alle übrigen Bits bleiben erhalten // Dass heisst: Der Style WS_DISABLED wird entfernt dwStyle := dwStyle AND NOT WS_DISABLED; // Prüfen, ob der Style WS_SYSMENU gesetzt ist if (dwStyle AND WS_SYSMENU) <> 0 then ... // oder (gleichbeutend) if (dwStyle AND WS_SYSMENU) = WS_SYSMENU then ... // Man könnte auch schreiben // dwStyle := dwStyle AND WS_SYSMENU; // hierdurch würde man dafür sorgen, dass alle Werte ausser // WS_SYSMENU gelöscht werden. // WS_SYSMENU ist allerdings nur dann noch enthalten, wenn er vorher // auch schon enthalten war // ... und den neuen Wert setzen SetWindowLong(Handle,GWL_STYLE,dwStyle); end; Es spielt bei der Verwendung OR/AND/NOT keine Rolle, wieviele Bits in den Werten gesetzt sind. Beispielsweise gibt es auch zusammengesetzte Werte, wie GENERIC_READ (siehe CreateFile) die mehrere Werte zu einem neuen zusammenfassen, so dass man nicht alle Einzelwerte mit OR verknüpft selber schreiben muss. Deshalb darf man diese Werte auch niemals addieren (+) oder subtrahieren (-), da es ansonsten durch Überträge zu falschen Bitmasken kommen kann (siehe auch in der Delphi-Hilfe das Beispiel zu FindFirst. So macht man es falsch), was zu völlig unverhersagbaren Ergebnissen führen kann, bishin zum Datenverlust. |
Re: Bitweise Operatoren
Zitat:
|
Re: Bitweise Operatoren
Danke euch beiden!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:46 Uhr. |
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