Entwickler-Ecke
Sonstiges (Delphi) - Wie teste ich, welche Bits in einem Int64 gesetzt sind?
dirkil2 - Mo 21.01.08 18:13
Titel: Wie teste ich, welche Bits in einem Int64 gesetzt sind?
Ich benötige eine Funktion, die testet, ob ein Bit in einem Int64 gesetzt ist. Ich probierte
Delphi-Quelltext
1: 2: 3: 4:
| function isBitSet( const num: Int64; const i: Integer ) : Boolean; begin Result := (num and (1 shl i)) <> 0; end; |
Das funktioniert aber nur für die ersten 32 Bits, da shl nur mit Integers (32 Bit) arbeitet. Wer hat eine Idee, wie ich das für Int64 abfragen kann?
Vielen Dank im Voraus!
Moderiert von
Christian S.: Delphi-Tags hinzugefügt
Allesquarks - Mo 21.01.08 18:29
Du könntest probieren ob du die int64 direkt shiften kannst und dann and verknüpfen.
Womit es auf jeden Fall geht ist rumpointern. Da musst du dann je nachdem welchen Teil des int64 du haben möchtest halt 4byte dazuaddieren.
benicz - Mo 21.01.08 18:32
Delphi-Quelltext
1: 2: 3: 4:
| Function IsBit(AValue : LongWord; ABitNo : LongWord): boolean; Begin result:= ((AValue and ( 1 Shl (ABitNo-1)))>0); End; |
...nurnoch für int64 umbauen und gut.
das prinzip sollte sich erklären, oder?
viel erfolg!
edit:
sorry, nicht weit genug gelesen...
ich würd's in zweimal 32 bit unterteilen und dann trotzdem so machen
Lossy eX - Di 22.01.08 10:28
64 Bit Werte sind kein natives Format der CPU und Delphi versucht deinen Code so gut / schnell wie möglich zu gestalten. Also interpretiert er deine Konstante 1 als einen 32 Bit Integer. Was aus Sicht der Geschwindigkeit auch vollkommen okay ist. Aber dir ist es nicht möglich so die oberen 32 Bit anzusprechen. Jetzt musst du Delphi nur beibringen, dass er einen 64 Bit Wert benutzen soll.
Dazu genügt es den Wert 1 als Int64 zu casten oder alternativ kannst du auch eine typisierte Konstante / Variable verwenden.
Delphi-Quelltext
1:
| Result := (num and (Int64(1) shl i)) <> 0; |
BenBE - Di 29.01.08 02:40
alternativ:
Delphi-Quelltext
1:
| Result := (num shr i) and 1 <> 0; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!