[英]flags as union of bitset and uint64_t
最近了解了c ++中的并集,为了解决由单个uint64_t等表示的多个标志,我提出了这一点
union myflags_t
{
uint64_t var;
std::bitset<64> bits;
myflags_t() { }
};
我之前使用的另一种方法是位操作 ,特别是设置位并将第n位更改为x 。
相反,我可以使用
myflags_t flags;
flags.var = 0;
flags.bits[nth bit] = ...
我的问题是联合或位运算中哪个更快?
另外,如果使用工会的速度更快,为什么我以前没有遇到过呢?
编辑:删除了memset(被误解,不需要它)我使用并集的原因是因为稍后在代码中我需要将变量传递为uint64_t编辑2:阅读注释,我确信我正在使用并集错误。 该代码创建了未定义的行为,因为联合并不适用于类型修剪。 要结束这个问题。
如果要翻转第n位,可以执行此操作。
#include <iostream>
#include <bitset>
#include <cstdint>
int main( void )
{
uint64_t u64 = 1024;
std::bitset <64> b64;
b64 = u64;
b64.flip(0);
u64 = b64.to_ulong();
std::cout << u64 << "\n";
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.