![]() |
Bitweise Operatoren von C++ in Delphi übersetzen
Hi, ich sitze gerade an folgender If-Bedingung die ich von C++ in Delphi übersetzen möchte:
Code:
Ich kann das ganze schon folgendermaßen auflösen:
(m_dwUsage & D3DUSAGE_DYNAMIC) ? D3DLOCK_DISCARD : 0
Delphi-Quellcode:
So, jetzt muss ich nurnoch das m_dwUsage AND D3DUSAGE_DYNAMIC verstehen... Weiß jemand wie ich das übersetze?
if (m_dwUsage AND D3DUSAGE_DYNAMIC) then
result := D3DLOCK_DISCARD else result := 0; FYI: m_dwUsage ist vom Typ DWORD. |
Re: Bitweise Operatoren von C++ in Delphi übersetzen
Einfach <> 0 ergänzen. In C kann man das weglassen.
|
Re: Bitweise Operatoren von C++ in Delphi übersetzen
Delphi-Quellcode:
if (m_dwUsage AND D3DUSAGE_DYNAMIC) = D3DUSAGE_DYNAMIC then
result := D3DLOCK_DISCARD else result := 0; |
Re: Bitweise Operatoren von C++ in Delphi übersetzen
Echt? Das wär ja wunderbar einfach ;) Danke!
|
Re: Bitweise Operatoren von C++ in Delphi übersetzen
Code:
x = (m_dwUsage & D3DUSAGE_DYNAMIC) ? D3DLOCK_DISCARD : 0;
Delphi-Quellcode:
x := IfThen(m_dwUsage and D3DUSAGE_DYNAMIC <> 0, D3DLOCK_DISCARD, 0);
|
Re: Bitweise Operatoren von C++ in Delphi übersetzen
Zitat:
Gibt da eventuell noch 'nen anderen "Trick". |
Re: Bitweise Operatoren von C++ in Delphi übersetzen
Hallo,
Zitat:
Delphi-Quellcode:
Damit aber eine Abfrage sinnvoll ist, muss m_dwUsage nicht eine Konstante, sondern eine Variable im Programm sein, die also verschiedene Werte annehmen kann. In meinem Beispiel wäre die Bedingung erfüllt, wenn Bit 3 gesetzt ist.
const
m_dwUsage = $00080; D3DUSAGE_DYNAMIC = $00081; //Die und Verknüpfung ergibt das: // 01000 // 01001 // ----- // 01000 |
Re: Bitweise Operatoren von C++ in Delphi übersetzen
jupp, also im Prinzip
Delphi-Quellcode:
Fogendes geht nur, wenn CONST nur aus einem Bit besteht
VAR and CONST = CONST
da ist dann ein is_not_zero-TEST meist schneller/kleiner, als ein Integer-CMP
Delphi-Quellcode:
und wenn man übereinstimmende Bitsequenzen hat (1 oder mehrere Bits), dann geht auch sowas
VAR and CONST <> 0
Delphi-Quellcode:
D3DUSAGE_DYNAMIC = $00080;
D3DLOCK_DISCARD = $00800; //if m_dwUsage and D3DUSAGE_DYNAMIC <> 0 then x := D3DLOCK_DISCARD else x := 0; x := (m_dwUsage and D3DUSAGE_DYNAMIC) shl 4; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 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