設置的最小有效位的位置我正在尋找一種有效的方法來確定在整數中設置的最小有效位的位置,例如對于0x0FF0,它將是4。一個簡單的實現是:unsigned GetLowestBitPos(unsigned value){
assert(value != 0); // handled separately
unsigned pos = 0;
while (!(value & 1))
{
value >>= 1;
++pos;
}
return pos;}有什么辦法能擠出一些循環嗎?(注意:這個問題是給喜歡這類事情的人,而不是為了讓人們告訴我木偶優化是邪惡的。)
3 回答
千萬里不及你
TA貢獻1784條經驗 獲得超9個贊
unsigned int v; // find the number of trailing zeros in 32-bit v int r; // result goes herestatic const int MultiplyDeBruijnBitPosition[32] = {
0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8,
31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9};r = MultiplyDeBruijnBitPosition[((uint32_t)((v & -v) * 0x077CB531U)) >> 27];“-解釋上述代碼的工作原理。 “-詳細分析這一問題,特別側重于國際象棋編程。
梵蒂岡之花
TA貢獻1900條經驗 獲得超5個贊
FFS(3)-Linux手冊頁
名字,姓名
FFS-查找一個單詞中的第一個位
簡介 #include <strings.h>int ffs(int i);#define _GNU_SOURCE#include <string.h>int ffsl(long int i);int ffsll(long long int i);
描述
函數返回在字I中設置的第一個(最不重要的)位的位置。最不重要的位是位置1和最重要的位置,例如32或64。函數ffsll()和ffsl()做同樣的工作,但使用可能不同大小的參數。
返回值
這些函數返回第一個位集的位置,如果i中沒有設置位,則返回0。
符合
4.3BSD,POSIX.1-2001。
注記
BSD系統有一個原型 <string.h>.
拉丁的傳說
TA貢獻1789條經驗 獲得超8個贊
bsf
邊注:
- 3 回答
- 0 關注
- 528 瀏覽
添加回答
舉報
0/150
提交
取消
