我有一個設置為1位的64位無符號整數。我想為每個可能的64個值分配一個值(在這種情況下,為奇質數,因此0x1對應于3,0x2對應于5,...,0x8000000000000000對應于313)。似乎最好的方法是將1-> 0,2-> 1,4-> 2,2,8-> 3,...,2 ^ 63-> 63轉換為數組中的值。但是,即使是這樣,我也不知道獲得二進制指數的最快方法是什么。而且可能還有更快/更好的方法。此操作將使用10 14到10 16次,因此性能是一個嚴重的問題。
3 回答
婷婷同學_
TA貢獻1844條經驗 獲得超8個贊
您可以使用二進制搜索技術:
int pos = 0;if ((value & 0xffffffff) == 0) {
pos += 32;
value >>= 32;}if ((value & 0xffff) == 0) {
pos += 16;
value >>= 16;}if ((value & 0xff) == 0) {
pos += 8;
value >>= 8;}if ((value & 0xf) == 0) {
pos += 4;
value >>= 4;}if ((value & 0x3) == 0) {
pos += 2;
value >>= 2;}if ((value & 0x1) == 0) {
pos += 1;}與循環相比,這樣做的優勢在于循環已經展開。但是,如果這確實對性能至關重要,則您將需要測試和衡量每個建議的解決方案。
- 3 回答
- 0 關注
- 522 瀏覽
添加回答
舉報
0/150
提交
取消
