unsigned long ccNextPOT(unsigned long x){
x = x - 1;
x = x | (x >> 1);
x = x | (x >> 2);
x = x | (x >> 4);
x = x | (x >> 8);
x = x | (x >>16);
return x + 1;
}
1
A
回答
2
OR和SHIFT語句在最高有效位(最多32位)的右側填充了x
的所有位。連同前遞減和遞增後的語句,這個函數計算(作爲函數名稱suggets)下一個冪次數,等於或大於給定數字(如果x
大於0且小於2^32 )
+0
預遞減確保兩個零的輸入和兩個冪的映射到它們自己。 – njuffa 2011-12-26 17:41:20
0
此功能x舍高達2下一個最高權力這正是代碼中here
unsigned int v; // compute the next highest power of 2 of 32-bit v
v--;
v |= v >> 1;
v |= v >> 2;
v |= v >> 4;
v |= v >> 8;
v |= v >> 16;
v++;
相關問題
- 1. 位置getAccuracy()這個函數做什麼?
- 2. 這個函數做什麼?
- 3. 這個函數做什麼?
- 4. 這個位移操作正在做什麼?
- 5. 這個LSB函數做了什麼?
- 6. 這個callback()函數做了什麼?
- 7. 這個C函數在做什麼?
- 8. 這個函數在做什麼?
- 9. 這個替換函數做什麼?
- 10. R - 這個tapply()函數做了什麼?
- 11. 這個lambda函數做什麼?
- 12. 這個高階函數做什麼?
- 13. 這個ruby函數做了什麼?
- 14. $ rootScope在這個函數中做什麼?
- 15. 這個構造函數在做什麼?
- 16. 這個JavaScript響應函數做什麼?
- 17. 這個回調函數做什麼?
- 18. 這個C++函數做了什麼?
- 19. 這個遞歸函數做什麼?
- 20. 這個get_text函數做了什麼?
- 21. 這個函數(convert_to_command)做什麼?
- 22. 這個函數做什麼videooptflowlines()matlab?
- 23. 這個Ruby函數在做什麼?
- 24. 這個函數做了什麼細節?
- 25. str_to_a32 - 這個函數做什麼?
- 26. 這個anonymmous split函數做什麼?
- 27. 這些操作員在做什麼C
- 28. 這個函數做什麼?與鉗位值有關?
- 29. 這個Cosine 16位函數實際上在做什麼?
- 30. 這位或者操作符在JavaScript中做了些什麼?
它的工作原理相當快。 – 2011-12-26 15:46:23
我知道它運作良好,但我想知道它使用哪種算法。 – guoxx 2011-12-26 15:51:16
看看[這裏](http://graphics.stanford.edu/~seander/bithacks.html#RoundUpPowerOf2)。 – Howard 2011-12-26 15:51:39