分配bitset的不同区域c

分配bitset的不同区域c,第1张

概述我有多个位集 bitset<32> addr;bitset<64> wdata; 我想将它们放入另一个bitset,基本上将它们连接成一个更大的bitset. bitset<96> 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("11111");                                                                          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: 11111 b: 1010101010ab: 111111010101010
总结

以上是内存溢出为你收集整理的分配bitset的不同区域c全部内容,希望文章能够帮你解决分配bitset的不同区域c所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1215349.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存