[问题] most significant bit

楼主: realgirl (realgirl)   2023-03-26 15:22:54
各位大大好,
请问如果给您选择,
您会选哪个函式来找出MSB呢?
int get_highest_bit_position(unsigned char x)
{
int n = 7;
if (x == 0) return -1;
if ((x >> 4) == 0) { n = n-4; x=x << 4;}
if ((x >> 6) == 0) { n = n-2; x=x << 2;}
if ((x >> 7) == 0) { n = n-1;}
return n;
}
int get_highest_bit_position(unsigned char x){
for(int i = 7; i >= 0 ;
作者: LPH66 (-6.2598534e+18f)   2023-03-26 16:43:00
https://en.cppreference.com/w/cpp/numeric/countl_zeroC++20 把这个标准化了, 之前各家编译器的这函数有各自名字更多可参考维基百科↓https://en.wikipedia.org/wiki/Find_first_set
作者: johnjohnlin (嗯?)   2023-03-27 07:52:00
如果自干的话我有看过1+最后4bit查表的做法不过还是call clz比较省事
作者: nh60211as   2023-03-27 18:38:00
clz > 2 > 查表 > 1
作者: johnjohnlin (嗯?)   2023-03-29 00:40:00
2是O(N) 1是O(lgN), 查表是O(1)但是表不能太大所以以前看xvid的实做不会用2
作者: a1234567289 (蛋包饭)   2023-04-03 17:55:00
这两个应该都是O(1) 他们都可以在某个常数时间完成
作者: johnjohnlin (嗯?)   2023-04-05 09:46:00
啊我说的N是bit数,64b的时候指令数就明显有差

Links booklink

Contact Us: admin [ a t ] ucptt.com