C での整数 Log2 値の決定
C では、専用の log2() がないため、整数 log2 操作を実行すると制限が発生する可能性があります。関数。この問題は、log を使用してバイナリ ツリー内のインデックスのレベルを計算するときに発生します。この場合、結果はエッジ要素 (つまり、値が 2^n の要素) に対して切り捨てられる可能性があります。
この問題を軽減するには正確な log2 計算を保証するには、bsr 命令を使用できます。最近の x86 または x86-64 プラットフォームで利用可能な bsr は、符号なし整数の設定された最上位ビットの位置を返します。これは、log2() と同等です。
これは、インライン ASM を利用して、 invoke bsr:
#include <stdint.h> static inline uint32_t log2(const uint32_t x) { uint32_t y; asm ( "\tbsr %1, %0\n" : "=r"(y) : "r" (x) ); return y; }
この関数を利用すると、符号なし整数入力に対して整数 log2 値を正確に計算できます。
以上が専用関数を使わずに C で整数 Log2 値を計算する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。