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.


Anmelden zum Antworten