ホームページ >バックエンド開発 >C++ >専用関数を使わずに C で整数 Log2 値を計算する方法は?

専用関数を使わずに C で整数 Log2 値を計算する方法は?

DDD
DDDオリジナル
2024-11-17 21:54:02904ブラウズ

How to Calculate Integer Log2 Values in C   Without a Dedicated Function?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。