相关疑难解决方法(0)

如何使用QueryPerformanceCounter?

我最近决定我需要为我的Timer类从使用毫秒更改为微秒,经过一些研究后,我认为QueryPerformanceCounter可能是我最安全的选择.(关于Boost::Posix它可能不适用于Win32 API 的警告让我有点失望).但是,我不确定如何实现它.

我正在做的是调用GetTicks()我正在使用的任何esque函数并将其分配给Timer的startingTicks变量.然后找到通过的时间量我只是从中减去函数的返回值startingTicks,当我重置计时器时,我再次调用该函数并为其分配startingTicks.不幸的是,从我看到的代码中,它并不像调用那么简单QueryPerformanceCounter(),而且我不确定我应该传递什么作为它的参数.

c++ windows timer

94
推荐指数
2
解决办法
17万
查看次数

获取64位整数内的位位数组

好吧,听起来有点复杂,但这正是我想要做的:

  • 以此为例 10101010101
  • 并返回{ 0, 2, 4, 6, 8, 10 }- 一个包含所有位置的数组

这是我的代码:

UINT DQBitboard::firstBit(U64 bitboard)
{
    static const int index64[64] = {
    63,  0, 58,  1, 59, 47, 53,  2,
    60, 39, 48, 27, 54, 33, 42,  3,
    61, 51, 37, 40, 49, 18, 28, 20,
    55, 30, 34, 11, 43, 14, 22,  4,
    62, 57, 46, 52, 38, 26, 32, 41,
    50, 36, 17, 19, 29, 10, 13, 21,
    56, 45, 25, 31, 35, 16,  9, …
Run Code Online (Sandbox Code Playgroud)

c c++ 64-bit bits bit-manipulation

12
推荐指数
4
解决办法
2313
查看次数

如何有效地找到第n个设置位?

对于与此问题相关的代码,我需要尽快计算以下内容:

给定32位整数i,计算第n个最低有效位集的位置.无论ñ和结果应该是0索引.

例如,给定数字i = 11010110101 2n = 4,所需数字为7,因为第四设置位在位置7:110 1 0110101.

使用pdep来自x86的BMI2指令集扩展的指令和常用的__builtin_ctz()内部函数,可以很容易地计算出来:

j = _pdep_u32(1 << n, i);
return (__builtin_ctz(j));
Run Code Online (Sandbox Code Playgroud)

但是,许多计算机没有pdep指令,这种方法略显不切实际.你也可以不用pdep这样计算这样的位位置:

j = i;
for (k = 0; k < n; k++)
    j &= j - 1;

return (__builtin_ctz(j));
Run Code Online (Sandbox Code Playgroud)

但是,这很慢.

我瞄准的是至少提供电脑__builtin_popcount()__builtin_ctz().如何更快地找到这样的位位置?

c bit-manipulation

9
推荐指数
0
解决办法
1668
查看次数

标签 统计

bit-manipulation ×2

c ×2

c++ ×2

64-bit ×1

bits ×1

timer ×1

windows ×1