![]() |
Re: "Variablenübergreifende" Bitverschiebungen
Wie meinst du das?
Also die geshiftete Zahl soll schon noch zu gebrauchen sein danach^^ |
Re: "Variablenübergreifende" Bitverschiebungen
Was hast du eigentlich vor? ;)
Wenn es um Arithmetik mit großen Zahlen geht und du dafür eine Library schreiben willst (weil du musst, nicht, weil dir einfach mal danach ist), wäre es vielleicht produktiver, ein Binding für ![]() |
Re: "Variablenübergreifende" Bitverschiebungen
Hi,
Ja genau das habe ich vor :mrgreen: Will das aber gerne mal selbst probieren. Bisher funktioniert es auch ganz gut. Allerdings weiß ich noch nicht so genau wie ich die Division halbwegs effizient implementieren kann... :( Das shiften klappt mittlerweile. Und ich denke auch ganz gut. |
Re: "Variablenübergreifende" Bitverschiebungen
Zitat:
Edit:
Delphi-Quellcode:
type
TByteArray = packed array of Byte; function Rol(const AValue, ACount: Byte): Byte register; asm mov cl, dl rol al, cl end; function ArrayShl(const arr: TByteArray; count: integer): TByteArray; var mask0, mask1, b0, b1: Byte; i: integer; begin Result := Copy(arr); {Byte-Verschiebung} i := count div 8; if i > 0 then begin Move(Result[i], Result[0], SizeOf(Result[0]) * (Length(Result) - i)); FillChar(Result[Length(Result) - i], SizeOf(Result[0]) * i, #0); count := count mod 8; end; {Bit-Verschiebung} mask0 := $FF shl Count; mask1 := mask0 xor $FF; b1 := 0; for i := High(Result) downto 0 do begin b0 := rol(Result[i], count); Result[i] := (b0 and mask0) or (b1 and mask1); b1 := b0; end; end; |
Re: "Variablenübergreifende" Bitverschiebungen
Hi,
So habe ichs im Prinzip auch gemacht. Allerdings mit shl und shr, statt rol :mrgreen: Wobei die Methode mit rol wahrscheinlich noch ein Stückchen schneller ist schätze ich. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:01 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