[英]assigning different regions of bitset c++
我有多個位集
bitset<32> addr;
bitset<64> wdata;
我想將它們放入另一個bitset,基本上將它們連接成一個更大的bitset。
bitset<96> datain;
有什么事情可以做到以下幾點
datain[95 downto 64] = addr;
datain[63 downto 0] = wdata;
我可以弄清楚如何分配單個位,但寫一個循環來分配單個位似乎過多。
謝謝。
你可以這樣做:
bitset<96> datain(addr.to_string<>() + wdata.to_string<>());
它不是特別有效。
我肯定會堅持寫循環,這使得逐位分配。 將其視為效用函數(完全不難寫)。 這是因為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: 1010101010
ab: 111111010101010
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.