为了账号安全,请及时绑定邮箱和手机立即绑定

旋转:设置哪一位?

旋转:设置哪一位?

C
元芳怎么了 2019-12-26 08:50:14
我有一个设置为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;}

与循环相比,这样做的优势在于循环已经展开。但是,如果这确实对性能至关重要,则您将需要测试和衡量每个建议的解决方案。


查看完整回答
反对 回复 2019-12-26
  • 3 回答
  • 0 关注
  • 484 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信