linear feedback shift register in C
// compile: gcc -o lfsr40 lfsr.c -lm
#include <stdio.h>
#include <string.h>
#include <math.h>
int main(void) {
// 40-bits
char str[]="1000000000000000000000000000000000000000";
int tabs[] = {39,37,20,18}; // tabs -1 because counting starts at 0
// 8-bits
char str[]="10000000";
int tabs[] = {7,5,4,3}; // tabs -1 because counting starts at 0
unsigned long val[4]; //int
char newchar;
unsigned long nrofit, stringlen; // int
stringlen = strlen(str);
nrofit = pow(2,stringlen) -1;
for (unsigned long i=0; i < nrofit; i++) {
printf("%s\n", str);
val[0] = str[tabs[0]] - 48;
val[1] = str[tabs[1]] - 48;
val[2] = str[tabs[2]] - 48;
val[3] = str[tabs[3]] - 48;
if ((((val[0] ^ val[1]) ^ val[2]) ^ val[3]) == 0)
newchar = '0';
else newchar = '1';
for (int k=stringlen-1; k > 0; k--) {
str[k] = str[k-1];
}
str[0] = newchar;
}
printf("num of iterations: %lu\n", nrofit);
return 0;
}