hilfe-lfsr-c



  • Hallo an alle!
    Also ich habe jetz vor kurzer zeit erst angefangen c zu programmieren und habe jetz ein bisschen herumprobiert! so jetz habe ich ein lfsr in c geschrieben:

    int num_aus = 0x0912345;  
      int num1 = 1;
      int num2 = 0;
      int num3 = 0;
      int xor = 0;
      int count = 0;
      int bitmask = 0x7FFFFFFF;
    
      int sum = 0; //wollte alle outpubits in einem string ausgeben!
    
    int main()
    { 
      printf("Meine Zahl lautet: %x \n", num_aus);
    
      while (count < 8)
      {
      num_aus >>= 0;  //num_aus = num_aus >> 0;
      num2 = num_aus & num1;
      printf("Outputbit: %x \n", num2); 
      sum |= num2;
      sum = sum << 1;
      //printf("alle bits: %x\n", sum);
    
      num3 = num_aus >> 1;
      num3 &= num1; 
      xor = num2 ^ num3;
    
      //--------------------------------------------------------------------
      num2 = num_aus >> 2;
      num2 &= num1;
      xor ^= num2;
    
      //--------------------------------------------------------------------
      num2 = num_aus >> 9;
      num2 &= num1;
      xor ^= num2;
    
      //--------------------------------------------------------------------
      num2 = num_aus >> 15;
      num2 &= num1;
      xor ^= num2;
    
      //--------------------------------------------------------------------
      num2 = num_aus >> 25;
      num2 &= num1;
      xor ^= num2;
      //printf("xor_fertig: %x \n", xor);
      //--------------------------------------------------------------------
      xor <<= 31;
      num_aus >>= 1;
      num_aus &= bitmask;
      num_aus |= xor;
      //printf("fertiger code: %x \n", num_aus);
      //--------------------------------------------------------------------
      count ++;
      }
     printf("alle bits: %x\n", sum);
      return 0;
    

    So mein Programm läuft jetz 8 mal durch und berechnet mir von einem Hex wert den ich eingebe das lfsr!
    mein polynom: x^32 + x^31 + x^30 + x^23 + x^17 + x^7 +1
    wenn ich mein programm ausführe erhalte ich dann diesen output:
    Meine Zahl lautet: 912345
    outputbit:0
    outputbit:1
    outputbit:1
    outputbit:0
    outputbit:0
    outputbit:0
    outputbit:0
    outputbit:0

    So soweit passt alles! Wie bekomme ich diese output jetz so zur Ausgabe:
    Output: 00000110 !!! 😕

    Vl kann mir da jemand behilflich sein!
    Und der Code ist vl ein bisschen verwirrend, da ich dauernd herumprobiere und immer gleich etwas aus kommentiere usw.

    Danke im voraus!

    mfg rene



  • rene_ob schrieb:

    So soweit passt alles! Wie bekomme ich diese output jetz so zur Ausgabe:
    Output: 00000110 !!! 😕

    Schreib in Zeile 19:

    printf("%x", num2);
    

    🙂



  • Hi,
    willst du Ergebnis adreasrum ausgeben, machst du Puffer, guckst du:

    char buf[9] = {0}; // Puffer
    	memset ( buf, '0', sizeof(buf)-1 );
    	if ( (1 || 2) << 3  ) buf[7] = '1';
    	if ( (4 || 5) << 6  ) buf[6] = '1';
    	// ... usw.
    	puts(buf);
    

    Oder was rekursives bauen.

    Gruß,
    B.B.



  • bit-shiftung mit und-abfrage:

    unsigned byte = 5; // 0000 0101
    
    for(unsigned i=7; i>=0; i++)
       printf("%d", (byte<<i&1?1:0));
    


  • ok danke einmal für die schnellen antworten!

    C/C++ Code:
    printf("%x", num2);

    Hab ich ja e! 😉

    Ich habs jetz anders gelöst!
    habe jetz bei jedem schleifendurchlauf mein outputbit in sum getan (mit einer Or verknüpfung und dann jedesmal 1 nach li geshiftet!
    Jetz hats funktioniert!
    Denn dann zum Schluss gibt er mir den HEX-Wert 60 aus!
    Das in binär umgerechnet ergibt dann genau meinen gewünschten output!

    mfg rene


Anmelden zum Antworten