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;
}