У меня есть (циклическая) bitset<N>
и хотел бы получить подстроку i...i+K-1
(где это могло случиться, что i = N - 1; K = 5
, поэтому он должен обернуть вокруг и получить N-1; 0; 1; 2; 3
), а другой bitset<K>
(К конечно известно во время компиляции)фрагмент подстроку из циклического BitSet
Очевидная вещь не работает, потому что operator &
не допускает операнды разных размеров (хотя это было бы тривиально?)
bitset<N> data = ...;
bitset<K> mask; mask = ~mask;
bitset<K> rotated = in << i | in >> (K - i);
bitset<K> slice = rotated & mask;
следующая лучшая вещь Безразлично» т с большими N
bitset<K> slice(rotated.to_ullong() & mask.to_ullong());
Что делать, если не реализовано bitset<min<N,K>::value> operator &(bitset<N>,bitset<K>)
? (и, возможно, не так ужасно неэффективен, этот подход копирует набор 3 раза)