Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengira Nilai Log2 Integer dalam C Tanpa Fungsi Khusus?

Bagaimana untuk Mengira Nilai Log2 Integer dalam C Tanpa Fungsi Khusus?

DDD
DDDasal
2024-11-17 21:54:02915semak imbas

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

Menentukan Nilai Log2 Integer dalam C

Dalam C , melaksanakan operasi log2 integer mungkin menghadapi had kerana ketiadaan log2() khusus fungsi. Isu ini dihadapi apabila menggunakan log untuk mengira tahap indeks dalam pepohon binari, yang hasilnya mungkin dibundarkan ke bawah untuk elemen tepi (iaitu, elemen dengan nilai 2^n).

Untuk mengurangkan isu ini dan memastikan pengiraan log2 yang tepat, arahan bsr boleh digunakan. Tersedia pada platform x86 atau x86-64 terkini, bsr mengembalikan kedudukan bit set tertinggi dalam integer tidak bertanda, yang bersamaan dengan log2().

Berikut ialah fungsi C/C ringkas yang menggunakan ASM sebaris untuk panggil 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;
}

Dengan menggunakan fungsi ini, integer nilai log2 boleh dikira dengan tepat untuk sebarang input integer yang tidak ditandatangani.

Atas ialah kandungan terperinci Bagaimana untuk Mengira Nilai Log2 Integer dalam C Tanpa Fungsi Khusus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn