2016-04-21 5 views
0

Ich arbeite an einer Aufgabe für meine Klasse comsci. Ich habe jedoch kein Problem mit dem, was der Auftrag verlangt. Die Idee besteht darin, Zahlen basierend auf einem Seed zufällig zu generieren, indem bestimmte Bitpositionen (Taps) ausgewählt werden, der Seed nach links verschoben wird und dann XOR-Logik verwendet wird, um entweder eine 0 oder 1 an das rechte Ende des Seeds anzuhängen. Der Basisfall ist ein Seed von 6 (0110) und tippt dann 3 und 2. Tap3 = 0, Tap2 = 1, 0 XOR 1 = 1. Dann verschiebt sich 6 (0110) nach links und wird 12 (1100), zuletzt die 1 ist hinzugefügt und der Wert wird 13 (1101). Die Abzweigungen bleiben bestehen, bis die gewünschte Anzahl von Werten gedruckt ist. Bedeutung nach dieser TAP3 = 1 und TAP2 = 0.XOR rekursive Funktion liefert Werte neben Null und eins

int tapShift(int tempSeed, int tap){//shifts seed over to the desired tap and returns that tap value. 0 or 1 
    int bitVal = tempSeed >> tap; 
    bitVal == bitVal & 1; 
    return bitVal;} 

int xorTaps(int taps[], int length, int tempSeed){ 
    if(length == 0){ 
    return tapShift(tempSeed, 31);//return a-1 tap after all input taps. 
    }else{//returns the binary value of selected tap to recursively determine XOR of taps. 
    return tapShift(tempSeed, taps[length-1])^xorTaps(taps,--length, tempSeed);} } 

Das Problem, das ich habe, ist, dass xorTaps wird Werte wie 6,7,5,3 Rückkehr, nur nicht Werte, die ich dachte, könnte zurückgeschickt werden. Ich habe das jetzt für ein paar Stunden ohne Fortschritt angeschaut, weshalb ich beschlossen habe, um Hilfe zu bitten. Ich rufe xorTaps in meinem Code weiter unten auf.

int feedback = xorTaps(taps, i , tempSeed); 

ein Abgriff der Bit n-1 muss immer als außer der Zuordnung berücksichtigt. Dh ein Tap für Slot 31 des 32 Bit Seeds wird immer in der XOR-Arithmetik ausgewertet.

+0

Sie sollten besser Formatierung Technik verwenden, zum Beispiel schließen Klammern auf ihre eigene Linie –

Antwort

0

Gut. Ich habe meinen Geschwister gefragt, der Debugging viel besser beherrscht. 20 Minuten später hatte ich getippt fälschlicherweise
bitVal == tempSeed & 1. Der richtige Code ist bitVal = tempSeed & 1.

+0

Sie einen Tippfehler haben Fehler in Ihrer Selbstantwort. Es scheint, dass Sie ein Problem mit dem Tippen von Dingen haben. Ich schlage vor, dass Sie nicht versuchen, es zu korrigieren - das Ergebnis kann rekursiv sein :) –