If this can code can help you understanding the Linear Shift Register. (^ represents Exclusive OR)
byte[] register = new byte[] { 0, 1, 0, 1 };
byte[] plain = new byte[] { 1, 0, 1, 0, 1, 0, 1, 0, 1, 1 }; ;
byte[] cipher = new byte[plain.Length];
for (int i = 0; i < plain.Length; i++)
{
//plaintext ^ state a0
cipher[i] = (byte)(plain[i] ^ register[0]);
//Temporary storing Result of a0 ^ a3
byte temp = (byte)(register[0] ^ register[3]);
//Shifting states one index Left
register[0] = register[1];
register[1] = register[2];
register[2] = register[3];
//Setting new state a3
register[3] = temp;
}