我有一个设置为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 关注
- 484 浏览
添加回答
举报
0/150
提交
取消