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

DDD
Lepaskan: 2024-11-17 21:54:02
asal
831 orang telah melayarinya

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;
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan