看板 C_and_CPP 關於我們 聯絡資訊
各位大大好, 請問如果給您選擇, 您會選哪個函式來找出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://www.ptt.cc/bbs/C_and_CPP/M.1679815376.A.FA6.html
LPH66: C++20 把這個標準化了, 之前各家編譯器的這函數有各自名字 03/26 16:44
LPH66: 更多可參考維基百科↓ 03/26 16:45
johnjohnlin: 如果自幹的話我有看過1+最後4bit查表的做法 03/27 07:52
johnjohnlin: 不過還是call clz比較省事 03/27 07:54
nh60211as: clz > 2 > 查表 > 1 03/27 18:38
johnjohnlin: 2是O(N) 1是O(lgN), 查表是O(1)但是表不能太大 03/29 00:40
johnjohnlin: 所以以前看xvid的實做不會用2 03/29 00:41
a1234567289: 這兩個應該都是O(1) 他們都可以在某個常數時間完成 04/03 17:55
johnjohnlin: 啊我說的N是bit數,64b的時候指令數就明顯有差 04/05 09:46