В вашем коде 5 младших битов в temp
всегда равны 0, тогда как только 4 младших бита pattern
равны.
Но на самом деле вы должны разделить маску и шаблон, как
unsigned char mask = 0b0000'0111; // (1 << pattern length) - 1
unsigned char pattern1 = 0b0000'0111;
unsigned char pattern2 = 0b0000'0000;
temp >>= j;
if ((mask & temp) == pattern1 || (mask & temp) == pattern2)
Таким образом, вы можете проверять любые подпоследовательности.
Также l oop должно быть до 5 включительно : шаблон может появляться в битах ( 0, 1, 2), (1, 2, 3), ..., (5, 6, 7).