作者realgirl (realgirl)
看板C_and_CPP
标题[问题] most significant bit
时间Sun Mar 26 15:22:54 2023
各位大大好,
请问如果给您选择,
您会选哪个函式来找出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 ; --i){
if(0b10000000 & x){return i;}
else{x = x << 1;}
}
return 0;
}
谢谢!
-----
Sent from JPTT on my iPhone
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 223.137.49.99 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1679815376.A.FA6.html
2F:→ LPH66: C++20 把这个标准化了, 之前各家编译器的这函数有各自名字 03/26 16:44
3F:→ LPH66: 更多可参考维基百科↓ 03/26 16:45
5F:推 johnjohnlin: 如果自干的话我有看过1+最後4bit查表的做法 03/27 07:52
6F:→ johnjohnlin: 不过还是call clz比较省事 03/27 07:54
7F:→ nh60211as: clz > 2 > 查表 > 1 03/27 18:38
8F:→ johnjohnlin: 2是O(N) 1是O(lgN), 查表是O(1)但是表不能太大 03/29 00:40
9F:→ johnjohnlin: 所以以前看xvid的实做不会用2 03/29 00:41
10F:推 a1234567289: 这两个应该都是O(1) 他们都可以在某个常数时间完成 04/03 17:55
11F:推 johnjohnlin: 啊我说的N是bit数,64b的时候指令数就明显有差 04/05 09:46