

#include <nitro/math.h>
u32 MATH_CountLeadingZeros( u32 x );
u32 MATH_CLZ( u32 x );
| x | 演算する数値 |
最上位から0のビットが連続でいくつあるかを返します。
x を2進数32ビットで表現した際に、最上位ビットから0が何ビット続くかを求める関数です。0x80000000 は 0、0 は 32 となります。
内部実装は ARM9 の ARM コードで使用可能な CLZ 命令をラップしたインライン関数となっており、コンパイラによって1命令に展開されます。ARM7 及び ARM9 の Thumb コードにおいては通常の関数が呼び出されます。
そのため、プログラム中で ARM, thumb を切り替える場合には、#pragma thumb on を使用せず、#include <twl/code16.h> を使用するようにしてください。
code16.h については、ヘッダファイル解説のページに説明があります。
MATH_CLZ は MATH_CountLeadingZeros()の別名です。
なお、末尾から続く 0 を数える場合はMATH_CountTrailingZeros()で求めることが可能です。
MATH_CountTrailingZeros, MATH_ILog2
2009/04/28 thumb モードへの切り替え方法について追記
2006/01/10 リンクミス修正
2005/12/22 MATH_CountTrailingZeros()へのリンクを追加
2005/06/02 & を & に修正
2004/12/14 初版