我想找到n
最低设置位的位置而不是最低设置位.(我不是在谈论n
第四位的价值)
例如,说我有:
0000 1101 1000 0100 1100 1000 1010 0000
我想找到第4位设置.然后我希望它返回:
0000 0000 0000 0000 0100 0000 0000 0000
如果popcnt(v) < n
,这个函数返回会有意义0
,但是对于我这个案例的任何行为都是可以接受的.
如果可能的话,我正在寻找比循环更快的东西.
在Windows上,我的平台是x86和x86-64.
中断优先级系统的要点是让最高优先级的中断超过其他中断.为了强制执行此操作,我猜测Windows将完全禁用所有较低级别的中断,直到更高级别中断的ISR完成为止.
但如果CPU没有收听中断,会发生什么?他们只是默默地消失了吗?或者他们是否在硬件中排队,等待中断再次启用?如果存放,在哪里?有多少人可以排队?如果有太多中断没有被处理,会发生什么?如果存在中断处理积压的罕见情况,检测问题的工具是什么?
当使用具有可变大小结构的各种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这个,或其他一些方法来使它安全或干净地处理这种类型的结构?
我想根据源自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
会给我IDevNum
和deviceName
每一个可能的事情,以使,但没有这个API将我连接到一个DISPLAYCONFIG_TARGET_DEVICE_NAME
,因为我无法如上述消息人士称与他们连接的目标联系起来.因此,我唯一的选择似乎是盲目地启用监视器,而无法确保我正在启用与我的目标结构匹配的正确监视器.
有没有人知道这些API足以提供帮助?我的预感是,我需要利用我一直试图使用的API以外的东西,因为我已经用调好的牙齿梳理了调试器中的所有潜在输出,但我可能会遗漏一些东西.也许在注册表中存储了一些我可以用来连接点的东西?如果有必要,我愿意考虑使用无证件的api或结构.
谢谢
我不是在说std::array
什么,只是经典的香草C/C++数组.我知道各种方式ARRAY_SIZE
/ _countof
可以实现,我只是想知道他们是否已经设法为此标准化了一个名称(在std::
我假设下).如果没有,是否有提案?
在范围退出上运行lambda似乎是一个基本的东西,我希望它是标准化的.unique_ptr
当它们适用时,情况会更好,但我发现需要无穷无尽的"一次性"析构函数,特别是在利用C风格的库时.有谁知道这是否会到来?
我将大整数编码为一个数组size_t
.我已经有其他操作工作(加,减,乘); 以及一位数的划分.但是如果可能的话,我想匹配乘法算法的时间复杂度(目前Toom-Cook).
我收集有线性时间算法,用于采用我的红利的乘法逆的各种概念.这意味着我理论上可以在与乘法相同的时间复杂度中实现除法,因为无论如何,线性时间操作通过比较是"无关紧要的".
我的问题是,我该怎么做呢?什么类型的乘法逆在实践中最好?模数64^digitcount
?当我将乘法逆乘以我的除数时,我可以推卸计算由于整数截断而丢弃的数据部分吗?任何人都可以提供C或C++伪代码或准确解释应该如何做到这一点?
或者是否存在比基于逆的方法更好的专用除法算法?
编辑:我挖出了上面提到的"反向"方法.在"Art of Computer Programming,Volume 2:Seminumerical Algorithms"的第312页上,Knuth提供了"算法R",它是一种高精度的倒数.他说它的时间复杂度小于乘法的时间复杂度.然而,将它转换为C并测试它并且不清楚将消耗多少开销内存等,直到我对其进行编码,这将花费一些时间,这是非常重要的.如果没有人打败我,我会发布它.
假设我有这三种不同的功能,我可能想指出:
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, …
假设我正在编写一个int
包装器并且需要提供每个运算符重载。作者必须列出每一个,还是可以根据作者提供的内容自动生成任何一个?编译器是否可以/是否从现有运算符中推断出任何新的自动定义运算符?
如果我定义operator==
,它会operator!=
自动给我一个吗?或相反亦然?
如果我定义operator++()
,我可以operator++(int)
免费获得吗?或相反亦然?
怎么样+=
类型的企业?它可以结合operator+
with 的现有定义operator=
来生成operator+=
吗?理论上应该是可能的,但有吗?
同样的问题>=
to<
等,还是我必须完整列出>
, >
, >=
, 的定义<=
?
有没有什么可以做的关于需要在头文件中引用的looong符号,例如ABDEFGHIJ::ZXCBVB::AWEDADSDEM::GFGBKGDF::Tools::Item
?我知道在头文件中你不应该使用using
它,因为它会弄乱任何包含它的人.
我能想到的唯一可以清理的唯一工作特征是#define
+ #undef
但这看起来很糟糕.
是否有一个新功能可以解决这个我不知道的问题?我也对任何受欢迎的提案感兴趣.也许using
用括号内的块语法,让我将效果限制在我的标题......?
c++ ×8
algorithm ×2
c++11 ×2
c++14 ×2
arrays ×1
biginteger ×1
binary ×1
c ×1
c++17 ×1
delegates ×1
division ×1
driver ×1
function ×1
header-files ×1
interrupt ×1
kernel ×1
kmdf ×1
namespaces ×1
nvidia ×1
pointers ×1
scopeguard ×1
unique-ptr ×1
winapi ×1
windows ×1