bit scan forward C++
-
hi,
weiss jemand vielleich ob es in C++ eine standardisierte funktion fuer das ermitteln des zuerst bzw. zuletzt gesetzten bits in einem Bit-Wort gibt!?!?
(Ich der Fachliteratur ist haeufig die rede von "bit-scan-forward" oder "bit-scan-reverse" operatoren die rede.
die iterative vorgehensweise an jeder position das gesetzt-sein eines bits im bit-wort zu ueberpruefen moechte ich nicht anwenden (zu umstaendlich) und suche nach einem operator der dies eventuell besser erledigt.
vielen dank.
gruss.
-
gibt's nicht in c++.
ich behelfe mir gerne mit inline-assembler.#ifdef USE_ASM inline u32 findFirstBitTrue(u32 x){ u32 r; asm( "bsf %[x],%[r];" :[r]"=a"(r) :[x]"r"(x) ); return r; } #else u32 findFirstBitTrue(u32 x){ int result=0; while((x&1)==0){ x>>=1; ++result; } return result; } #endif
oder so.
die iteratove lösung solltest du auf jeden fall mit-angeben, damit, falls du mal den compiler wechselst, wenigstens das programm ruck zuck wieder zum laufen kriegst und des neuen compilers richtige asm-syntax vertagen (verwochen) kannst.
-
Die iterative Lösung könnte man mit 'ner LUT (zB für ein Byte) evtl. noch etwas performanter gestalten.