Sorry, aber Deine Lösung läßt sich (unter XE5) (noch?) nicht kompilieren.
Sorry, wollte die Inline-Variablen auch mal ausprobieren. Dann aber vergessen die wieder rauszunehmen:
Delphi-Quellcode:
function ValueOfNthSetBitV2(
const aValue: UInt64;
const aValueBitWidth: Byte;
const aN: UInt64): Byte;
var
vTmp:
Array[0..63]
of UInt64;
vBitCount: Byte;
vI: Integer;
vBit: UInt64;
begin
if aValueBitWidth= 0
then
raise Exception.Create('
Fehlermeldung');
vBitCount:= 0;
for vI:= 0
to aValueBitWidth- 1
do
begin
vBit:= 1
shl vI;
if (aValue
and vBit)<> 0
then
begin
vTmp[vBitCount]:= vBit;
Inc(vBitCount);
end;
end;
if vBitCount= 0
then
raise Exception.Create('
Fehlermeldung');
Result:= vTmp[(aN- 1)
mod vBitCount];
end;
Mit freundlichen Grüßen, einbeliebigername.