Прежде всего, индекс цикла j проходит после конца bitset
. Индексы идут от 0 до bitseq.size()-1
(включительно). Если вы собираетесь протестировать j
и j+1
, самое большое значение j
может быть bitseq.size()-2
.
Во-вторых, часть ==0
, которая появляется в ваших if
s, странная, вы должны просто использовать
if( (a==0)&&(b==0) )
Обратите внимание на использование двух &&
. Хотя для этого кода работает один &
, я думаю, что лучше использовать оператор, который правильно передает ваши намерения.
А затем, чтобы ответить на ваш вопрос, вы можете оставить переменную «последний бит», изначально установленную в значение часового значения (указывающее, что вы видите первый битовый запрос только сейчас), и сравнить его с bitseq [0] перед началом. цикла 2. Вот модифицированная версия вашего кода, которая должна делать то, что вы просите.
int main {
srand((unsigned)time(0));
unsigned int x;
int transition0_0 = 0,
transition0_1 = 0,
transition1_0 = 0,
transition1_1 = 0;
int prev = -1;
for (int i=0:i<=512;i++) // loop-1
{
x=rand()%512;
bitset<9> bitseq(x);
if( prev != -1 ) // don't check this on the first iteration
{
bool cur = bitseq.test(0);
if( !prev && !cur )
++transition0_0;
else if( !prev && cur )
++transition0_1;
else if( prev && !cur )
++transition1_0;
else
++transition1_1;
}
for(int j=0;j+1<bitseq.size();j++) // loop-2
{
bool a= bitseq.test(j);
bool b= bitseq.test(j+1)
if ((a==0)&&(b==0))
{
transition0_0 = transition0_0 + 1; // transition from 0 to 0
}
else if ((a==0)&&(b==1))
{
transition0_1 = transition0_1 + 1;
}
else if ((a==1)&&(b==0))
{
transition1_0 = transition1_0 + 1;
}
else
{
++transition1_1 = transition1_1 + 1;
}
} // for-2
prev = bitseq.test(bitseq.size()-1); // update prev for the next iteration
cout<<transition0_0<<" "<<transition0_1<<endl;
cout<<transition1_0<<" "<<transition1_1<<endl;
} // for-1
} // main