小编Voi*_*tar的帖子

在int中找到第n个SET位

我想找到n最低设置位的位置而不是最低设置位.(我不是在谈论n第四位的价值)

例如,说我有:
0000 1101 1000 0100 1100 1000 1010 0000

我想找到第4位设置.然后我希望它返回:
0000 0000 0000 0000 0100 0000 0000 0000

如果popcnt(v) < n,这个函数返回会有意义0,但是对于我这个案例的任何行为都是可以接受的.

如果可能的话,我正在寻找比循环更快的东西.

algorithm binary function

20
推荐指数
4
解决办法
5248
查看次数

在x86上,当操作系统禁用中断时,它们是否会消失,或者它们是否排队并"等待"中断重新开启?

在Windows上,我的平台是x86和x86-64.

中断优先级系统的要点是让最高优先级的中断超过其他中断.为了强制执行此操作,我猜测Windows将完全禁用所有较低级别的中断,直到更高级别中断的ISR完成为止.

但如果CPU没有收听中断,会发生什么?他们只是默默地消失了吗?或者他们是否在硬件中排队,等待中断再次启用?如果存放,在哪里?有多少人可以排队?如果有太多中断没有被处理,会发生什么?如果存在中断处理积压的罕见情况,检测问题的工具是什么?

kernel driver interrupt interrupt-handling kmdf

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

将reinterpret_cast输入重新解释为std :: unique_ptr是不是真的安全?

当使用具有可变大小结构的各种API(必须分配为byte []然后转换为struct的结构)时,如果unique_ptr持有者可以指向结构,那将是很好的,因为这是我们将要使用的.

例:

std::unique_ptr<VARIABLE_SIZE_STRUCT[]> v; 
v.reset(reinterpret_cast<VARIABLE_SIZE_STRUCT*>(new BYTE[bytesRequired]));
Run Code Online (Sandbox Code Playgroud)

这允许`v为结构本身提供视图,这是优选的,因为我们不需要第二个变量,除了删除之外我们不关心字节指针.

问题在于可能会在演员表上敲击指针(使其免于安全).我认为没有合理的理由为什么编译器会改变转换时的指针值(因为没有继承),但是我听说标准保留了对任何转换的任何指针的权利,所以就符合标准的编码而言,办法是窗外的吧?或者有什么理由它是安全的吗?有没有办法至少static_assert这个,或其他一些方法来使它安全或干净地处理这种类型的结构?

c++ pointers unique-ptr reinterpret-cast c++11

11
推荐指数
2
解决办法
1932
查看次数

Windows多监视器:当目标可用但未激活时,如何确定目标是否物理连接到源?

我想根据源自DISPLAYCONFIG_TARGET_DEVICE_NAME和/或的信息启用特定的禁用监视器DISPLAYCONFIG_PATH_TARGET_INFO.要实际启用此监视器,我需要做的就是成功将其映射到匹配的 devicename名称以启用,例如\\.\DISPLAY1.但是,如果没有预先存在的专门知识,我找不到任何通用的方法来做出这个决定.如果我只能将它与实际相关的匹配联系起来DISPLAYCONFIG_PATH_SOURCE_INFO.

QueryDisplayConfig在我的机器上返回源和目标的每个可能组合,甚至将监视器与它们实际上未连接的源配对.我有4个端口和3个监视器,因此我得到targetAvailable目标中的12个组合,因为它使用相关和不相关的源重复每个目标.因为我得到了不真实的源+目标组合,我无法确定哪个源实际上与哪个目标物理连接,除非源+目标对已经激活,例如DISPLAYCONFIG_PATH_INFO::flags具有DISPLAYCONFIG_PATH_ACTIVE.然后我可以很容易地说出发生了什么.

基本上,只要目标正在使用/附加到桌面,就没有任何问题; 有很多方法可以关联它所连接的源.但在这种情况下,目标被禁用,但已连接(意味着在控制面板中,监视器可用,但从多监视器设置中排除).API显示已禁用的设备没有问题,但我无法确定它连接到哪个端口或启用哪个设备.因为监视器被禁用,EnumDisplayMonitors所以没用.

显然EnumDisplayDevices会给我IDevNumdeviceName每一个可能的事情,以使,但没有这个API将我连接到一个DISPLAYCONFIG_TARGET_DEVICE_NAME,因为我无法如上述消息人士称与他们连接的目标联系起来.因此,我唯一的选择似乎是盲目地启用监视器,而无法确保我正在启用与我的目标结构匹配的正确监视器.

有没有人知道这些API足以提供帮助?我的预感是,我需要利用我一直试图使用的API以外的东西,因为我已经用调好的牙齿梳理了调试器中的所有潜在输出,但我可能会遗漏一些东西.也许在注册表中存储了一些我可以用来连接点的东西?如果有必要,我愿意考虑使用无证件的api或结构.

谢谢

c++ windows winapi multiple-monitors nvidia

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

是否有标准名称(模板或宏)来替换ARRAY_SIZE,_countof等?

我不是在说std::array什么,只是经典的香草C/C++数组.我知道各种方式ARRAY_SIZE/ _countof可以实现,我只是想知道他们是否已经设法为此标准化了一个名称(在std::我假设下).如果没有,是否有提案?

c++ arrays

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

范围保护/范围退出成语是否会标准化?

在范围退出上运行lambda似乎是一个基本的东西,我希望它是标准化的.unique_ptr当它们适用时,情况会更好,但我发现需要无穷无尽的"一次性"析构函数,特别是在利用C风格的库时.有谁知道这是否会到来?

c++ scopeguard c++14 c++17

8
推荐指数
2
解决办法
2191
查看次数

我应该使用什么算法进行高性能大整数除法?

我将大整数编码为一个数组size_t.我已经有其他操作工作(加,减,乘); 以及一位数的划分.但是如果可能的话,我想匹配乘法算法的时间复杂度(目前Toom-Cook).

我收集有线性时间算法,用于采用我的红利的乘法逆的各种概念.这意味着我理论上可以在与乘法相同的时间复杂度中实现除法,因为无论如何,线性时间操作通过比较是"无关紧要的".

我的问题是,我该怎么做呢?什么类型的乘法逆在实践中最好?模数64^digitcount?当我将乘法逆乘以我的除数时,我可以推卸计算由于整数截断而丢弃的数据部分吗?任何人都可以提供C或C++伪代码或准确解释应该如何做到这一点?

或者是否存在比基于逆的方法更好的专用除法算法?

编辑:我挖出了上面提到的"反向"方法.在"Art of Computer Programming,Volume 2:Seminumerical Algorithms"的第312页上,Knuth提供了"算法R",它是一种高精度的倒数.他说它的时间复杂度小于乘法的时间复杂度.然而,将它转换为C并测试它并且不清楚将消耗多少开销内存等,直到我对其进行编码,这将花费一些时间,这是非常重要的.如果没有人打败我,我会发布它.

c c++ algorithm biginteger division

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

在C++ 11中使用std :: function作为委托

假设我有这三种不同的功能,我可能想指出:

float test1(int a, int b) {
    return 7.0f;
}

struct TestClass {
    float test2(int a, int b) {
        return 5.0f;
    }
};

struct TestClass2 {
    float  test3(int a, int b) {
        return 3.0f;
    }
};
Run Code Online (Sandbox Code Playgroud)

注意所有三个都使用相同的参数并返回值.我想要抽象出它是否是一个成员函数以及它属于哪个类.我想要一个委托类型,它可以引用这3个函数中的任何一个,这取决于它是如何初始化的.

这是我的第一次尝试:

typedef std::function<float(int, int)> MyDelegate; // is this right?

int main() {
    TestClass obj; 
    TestClass2 obj2;

    MyDelegate a = test1;
    MyDelegate b = std::bind(std::mem_fn(&TestClass::test2), obj); // is this right?
    MyDelegate c = std::bind(std::mem_fn(&TestClass2::test3), obj2); // is this right?

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的想法是,我也想将'this'指针存储在包装器中.这样,它就像一个功能齐全的委托.例如,调用'b(x,y)'就像调用一样obj.test2(x, …

c++ delegates function-pointers c++11

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

是否有基于其他操作符自动提供的 C++ 操作符重载?

假设我正在编写一个int包装器并且需要提供每个运算符重载。作者必须列出每一个,还是可以根据作者提供的内容自动生成任何一个?编译器是否可以/是否从现有运算符中推断出任何新的自动定义运算符?

如果我定义operator==,它会operator!=自动给我一个吗?或相反亦然?

如果我定义operator++(),我可以operator++(int)免费获得吗?或相反亦然?

怎么样+=类型的企业?它可以结合operator+with 的现有定义operator=来生成operator+=吗?理论上应该是可能的,但有吗?

同样的问题>=to<等,还是我必须完整列出>, >, >=, 的定义<=

c++ operator-overloading compiler-generated

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

在标头中处理痛苦的长命名空间名称

有没有什么可以做的关于需要在头文件中引用的looong符号,例如ABDEFGHIJ::ZXCBVB::AWEDADSDEM::GFGBKGDF::Tools::Item?我知道在头文件中你不应该使用using它,因为它会弄乱任何包含它的人.

我能想到的唯一可以清理的唯一工作特征是#define+ #undef但这看起来很糟糕.

是否有一个新功能可以解决这个我不知道的问题?我也对任何受欢迎的提案感兴趣.也许using用括号内的块语法,让我将效果限制在我的标题......?

c++ namespaces header-files c++14

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