标志为bitset和uint64_t的联合
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:阅读评论后,我确信我错误地使用了union。代码创建了未定义的行为,因为联合不是用于类型双关语的。结束问题
如果你想翻转第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;
}
相关文章:
- 如何打印大于"无符号长长"的"std::bitset"的十进制值?
- 关于 std::bitset 构造函数的几个问题?
- 如何以滑动窗口方式从 std::bitset 读取位并将它们转换为 int?
- 在哪里可以找到 std::bitset 的数据成员?
- 关于uint64的atomic_fetch_add的奇怪行为
- 对于std::bitset,是否有一个ffs()等价物
- 移动 std::bitset<N> 是否超过 N 个位置未定义的行为?
- 是否可以让 Bitset 将位打印到一行?
- 为什么 UInt64 变量不能包含大于 UInt32::Max 的值?
- 找不到使用 bitset 实例化模板函数的有效方法
- 我正在使用 std::bitset 并尝试创建两个大小为 100,000,000,000 的数组 std::bitset
- OMNeT++ cPacket as std::bitset 以应用 Reed-Solomon 编码
- 如何在<N>不发生内存泄漏的情况下同时(线程安全)填充 c++11 std::map<std::string,std::bitset*>?
- 初始化一对(bitset,int)的向量
- 将字符数组转换为 std::string 以传递到 std::bitset seg 错误
- std::bitset 哈希函数算法
- 与STD :: BITSET的工会成员的结构填充
- 从文件中读取字符串并转换为 bitset<12>
- 从 2 个 uint64 值中提取诡异哈希 128 位值
- 将模板类型名称转换为 uint64