Have gone with the following solution:
public int DoShift()
{
//Remember falloff, shift register, add new bit
int result = Contents & 1;
Contents = (Contents >> 1) ^
((CountBits(Contents & tapSequence) % 2) << (length - 1));
return result;
}
//Brian Kernighan method of counting bits
public static int CountBits(int value)
{
int count = 0;
while (value != 0)
{
count++;
value &= value - 1;
}
return count;
}
Additionally, I may also attempt some to run elements of the broader programme in parallel.