Ich möchte das niedrigstwertige Setzbit eines beliebigen Bits löschen. Das Problem ist, dass ich nicht unbedingt die Num
Instanz habe, also x.&.(x-1)
ist keine Option. Die einzige Funktion, die ich denken konnte, ist dies:Lösche das niederwertigste Setzbit
clearLsb x = x `clearBit` countTrailingZeros x
ich es gegen die x&(x-1)
Version gebenchmarkt, und es ist 1,5 langsamer auf Word32
und Word64
unabhängig von der Höhe der Optimierung. Ich würde mich freuen, wenn jemand einen cleveren Hack dafür kennt.
Sie Arithmetik mit logischen Operationen emulieren können, aber bezweifeln es schneller ist. – augustss
Ich kann nicht vermeiden, mich zu wundern, warum Sie die 'Num'-Subtraktion und die von Ihnen gepostete Formel nicht verwenden können. – chi
@chi, weil ich einen Typ wie Datenmaske haben könnte = Maske Word Word ..., für die es ganz natürlich wäre, eine Bits-Instanz zu machen, aber Num ist viel mehr beteiligt. – lanskey