作为数字的位的c++列表
C++ list of bits as numbers
我希望有一个位的列表,例如,我可以在列表的某个部分进行数学运算。
value: 864
as bits, pos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
as bits, value: 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0
如果我取位1到4和6到9,我得到0,1,1,1,0,1,0,0,0(104)。然后如果我加3,它就变成了0,1,1,0,1,1,1 (107)
我可以用std::vector和位之间按位操作的过程来实现这一点,代码看起来像这样:if(xor(data[n], data[n2])) {data[n - 1] == false;}等等…
我甚至可以使用POD数组,但我在想,c++与计算机内部如此接近,通常没有什么帮助,但在这里,它可以允许这个操作非常快地完成。
类似于将值存储在一个大的POD变量或数组中,然后将它们复制到另一个变量的内存中,以便在将它们复制回存储中的位置之前可以完成数学运算?
更好的是,例如加法运算符是否可以以某种方式将内存中的位置作为参数,直接在数据存储的中间执行加法操作?
听起来你想要Boost。DynamicBitset:
dynamic_bitset
类表示一组位。它提供了通过operator[]
访问单个位的值,并提供了可以应用于内置整数(如operator&
和operator<<
)的所有位运算符。在运行时,通过给dynamic_bitset
的构造函数的形参来指定集合中的位数。
可能的快速方法不起作用,并且将非常有限。
unsigned int n = 8;
unsigned short *p1, *p2;
p1 = reinterpret_cast<unsigned short*>(&n);
p2 = reinterpret_cast<unsigned short*>((&n)+1);
std::cout<<*p1<<", "<<*p2<<std::endl;
这是完整的解决方案,感谢您的信息,让我完成这一点。可以很容易地修改为使用std::vector。
#include <math.h> // for pow in weighted_random_UINT
#include <bitset> // or std::vector<bool>
template <std::size_t T> // this line is not required with std::vector
unsigned int get_chunk(std::bitset<T>* btset, unsigned int start, unsigned int end)
{
unsigned long out = 0;
for(unsigned int n = start; n < end; n++)
{
out += unsigned long((*btset)[n] * pow(2,double(n-start)));
}
return out;
}
void main()
{
// 6 bits of data in reverse order
std::bitset<6> data (std::string("000110"));
// all the data numerically
std::cout<<get_chunk<6>(&data,0,5)<<std::endl;
// the first 3 bits as a number
std::cout<<get_chunk<6>(&data,0,2)<<std::endl;
// the last 3 bits as a number
std::cout<<get_chunk<6>(&data,3,5)<<std::endl;
}
相关文章:
- Pybind11:将元组列表从Python传递到C++
- 从链接列表c++中删除一个项目
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- C++如何通过用户输入删除列表元素
- 读取文件的最后一行并输入到链接列表时出错
- 复制列表初始化的隐式转换的等级是多少
- LNK2038、MSVS2017 MAGMA的原因列表
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 没有为自己的结构调用列表推回方法
- 使用简单类型列表实现的指数编译时间.为什么
- 一对向量构造函数:初始值设定项列表与显式构造
- 标准是否使用多余的大括号(例如 T{{{10}}})定义列表初始化?
- 通过for循环使用用户输入填充列表
- C++:如何使函数只返回作为列表一部分的字符串
- 概念中的cv限定符需要表达式参数列表
- 下面是我为检测链接列表中的循环而制作的代码
- 建议在运行时将带有类实例的列表从c++导入qml
- 如何维护资源管理器项目视图中当前可见的项目列表
- 在卡萨布兰卡形成编码参数的列表
- 在没有参数列表的情况下使用模板名称"Event"无效,模板问题