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!