Ich habe das also richtig verstanden, dass die 48 QWORDS mögliche Züge darstellen, und je höhherwertig das zuletzt gesetzte Bit ist, desto besser wäre der Zug (bzw. dreht er am meisten Gegnersteine um), richtig? Weil dann musst du doch nur noch das QWORD raussuchen, dass am größten ist, also einfach via normlaem arithmetischem Vergleich. Wenn du dann das letzte gefunden hast, kannst du einmalig durch den Logarithmus die Stelle des Bits ermitteln, und musstest dies nicht für alle tun. Der Logarithmus ist zudem nicht allzu wild, da es direkt Opcodes dafür, und auch fürs Runden gibt. Wobei ich grad nicht sicher bin wie viel Aufwand es durch die 64-Bittigkeit mehr ist das zwischen den Registern hin und her zu schieben. Im Zweifel machste einfach ein Case daraus. Der ist zwar erstmal viel Geschreibsel, aber unter Delphi in der Regel sehr schnell:
Delphi-Quellcode:
case zugQW of
$0: umgedreht := 0;
$1: umgedreht := 1;
$2..$3: umgedreht := 2;
$4..$7: umgedreht := 3;
$8..$F: umgedreht := 4;
$10..$1F: umgedreht := 5;
$20..$3F: umgedreht := 6;
.
.
.
end;
Wobei ich mir HIER wiederum nicht mehr ganz sicher bin, ob ein QWORD als Ordinaltyp gilt, und mangels Delphi an dieser Kiste grad auch nicht schnell nachsehen kann.
Edit: Ich seh mir grad den Wikipedia Artikel an. Die Sache mit dem Case dürfte nach diesen Infos wohl leider an der Beschränkung der Literale scheitern, es sei denn in Hex gehts evtl. doch
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)