分配bitset的不同区域c
发布时间:2020-12-16 09:47:00 所属栏目:百科 来源:网络整理
导读:我有多个位集 bitset32 addr;bitset64 wdata; 我想将它们放入另一个bitset,基本上将它们连接成一个更大的bitset. bitset96 datain; 有什么事情可以做到以下几点 datain[95 downto 64] = addr;datain[63 downto 0] = wdata; 我可以弄清楚如何分配单个位,但写
我有多个位集
bitset<32> addr; bitset<64> wdata; 我想将它们放入另一个bitset,基本上将它们连接成一个更大的bitset. bitset<96> datain; 有什么事情可以做到以下几点 datain[95 downto 64] = addr; datain[63 downto 0] = wdata; 我可以弄清楚如何分配单个位,但写一个循环来分配单个位似乎过多. 谢谢. 解决方法
我肯定会坚持写循环,这使得逐位分配.将其视为效用函数(完全不难写).这是因为std :: bitset不符合Container概念,因此无法使用标准算法(例如std :: copy)进行切片或复制.
另外,请注意,由于实现,您不能简单地获取特定位的地址(不是这样的,尽管您可以获得“代理引用”). 只需编写它(您的自定义“位切片器”)并永远忘记. 只是一个样子的样子(它很难看,但它有效): #include<bitset> #include<iostream> template<size_t N1,size_t N2> std::bitset<N1+N2> bitwise_copy(const std::bitset<N1>& b1,const std::bitset<N2>& b2) { std::bitset<N1+N2> res; for(size_t k=0; k<N2; k++) { res[k] = b2[k]; } for(size_t k=0; k<N1; k++) { res[N2+k] = b1[k]; } return std::move(res); } int main() { std::bitset<5> a("22222"); std::bitset<10> b("1010101010"); auto ab = bitwise_copy(a,b); std::cout<<" a: "<<a<<std::endl <<" b: "<<b<<std::endl <<"ab: "<<ab<<std::endl; return 0; } 当您使用gcc 4.8.1(使用-std = c 11)进行编译时,输出为: a: 22222 b: 1010101010 ab: 222221010101010 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |