相关疑难解决方法(0)

Bit twiddling:设置了哪个位?

我有一个64位无符号整数,正好设置了1位.我想为每个可能的64个值分配一个值(在这种情况下,奇数素数,因此0x1对应于3,0x2对应于5,...,0x8000000000000000对应于313).

似乎最好的方法是转换1 - > 0,2 - > 1,4 - > 2,8 - > 3,...,2 ^ 63 - > 63并查找数组中的值.但即使如此,我也不确定获得二进制指数的最快方法是什么.并且可能还有更快/更好的方法.

此操作将使用10 14到10 16次,因此性能是一个严重的问题.

c bit-manipulation

31
推荐指数
4
解决办法
1万
查看次数

快速查找64位整数中设置最高和最低有效位的方法

StackOverflow上有很多关于此的问题.很多.但是我找不到答案:

  • 在C#中工作
  • 适用于64位整数(与32位相反)

比...快:

private static int Obvious(ulong v)
{
    int r = 0;
    while ((v >>= 1) != 0) 
    {
        r++;
    }
    return r;
}
Run Code Online (Sandbox Code Playgroud)

甚至

int r = (int)(Math.Log(v,2));
Run Code Online (Sandbox Code Playgroud)

我在这里假设一个64位Intel CPU.

一个有用的参考是Bit Hacks页面,另一个是fxtbook.pdf. 然而,虽然这些提供了解决问题的有用方向,但它们没有给出准备好的答案.

我正在使用一个可重用的函数,只能为C#执行与_BitScanForward64_BitScanReverse64类似的操作.

c# bit-manipulation

11
推荐指数
3
解决办法
3911
查看次数

如何找到与另一个数字最接近的数字,即2的幂?

我正在为我的2D游戏创建一个世界生成器,该生成器使用Java中的Diamond-Square算法,并且听说它仅在2 n +1(幂)个数下有效(或至少有效)二)。

用调用生成世界的方法generateWorld(width, height),但是会产生问题。我希望能够输入a ,如果输入宽度不是width,该函数将找到最接近的数字,该数字是2的幂。我真的不知道该怎么做,因此非常感谢所有帮助!

总结:如果一个数不是2功率,我想找到最近的号码的那一个,这二的幂。

java algorithm

4
推荐指数
1
解决办法
2534
查看次数

在不使用Log()的情况下查找位

我有一个整数输入,功率为2(1,2,4,8等).我希望函数在不使用log()的情况下返回位位置.例如,对于上面的输入,将分别返回{0,1,2,3}对于C#.如果这可以在SQL中完成.

谢谢!

c# sql bit-manipulation

1
推荐指数
1
解决办法
1638
查看次数

标签 统计

bit-manipulation ×3

c# ×2

algorithm ×1

c ×1

java ×1

sql ×1