Dá se nějak efektivně vypočítat počet nulových bitů v čísle zleva? Aniž by člověk musel používat smyčky a převody pomocí *char. Existuje na to nějaký trik? V tabulce níže jsou uvedené číselné rozsahy, lichý řádek minimum, sudý maximum. Jde o 32 bitové číslo, ale pro jednoduchost jsem ty nuly nedopsal. Tak např. první dva řádky mají mít 30 nul zleva. Jako další příklad uvedu uint32_t x=0b100010 ... číslo se nachází ve druhém rozsahu a má mít 26 nul. Jaksi mě zajímá jestli existuje nějaká finta jak vrátit řád ve kterém se to nachází.
#3PiranhaGreg
Dík, myslím že tu funguje, ale že to tiskne výsledek o jedna větší:
int cislo = 0b10;
dává 31, a mělo by být 30. Tak asi výsledek zmenšit o jedna.
A napadla mě ještě další možnost, delší kód, ale možná (?) efektivnější, vytvořit 16 podmínek if .. else, kde každá testuje danou proměnnou s maskou. Takže test na první masku by byl třeba takto:
( cislo & ~0x11111111111111111111111111111100 )
přičemž by to mělo zjišťovat jestli se zam nachází 30 nul vlevo a další dva bity nerozhodují.