2016-11-10 41 views
2

我有两个位集std::bitset<200> Astd::bitset<200> B,我想比较位A[10-60]B[50-100]。我将两个位集中的50位提取到另外两个位集,然后将它们比较如下。有没有更好的方法?比较C++中的子位集

std::bitset<200> A, B; 
// A and B are already set 
std::bitset<50> x, y; 
for(int i=10; i<=60; i++) 
    if(A.test(i)) x.set(i); 
for(int i=50; i<=100; i++) 
    if(B.test(i)) y.set(i); 

if(x == y) .... 
+1

它看起来像你的循环有一个错误的错误,这将引发异常。 – Rakete1111

回答

4

如何将两个位集A和B一起循环?

bool same = true; 
for (size_t ai = 10, bi = 50; ai != 60; ++ai, ++bi) { 
    if (A.test(ai) != B.test(bi) { 
    same = false; 
    break; 
    } 
} 
// same denotes if the sections of A and B are equal. 
+0

是的,我也试过。我想知道是否可以在不比较每一位的情况下完成一些更快的按位操作。 – viz12