Rechtsshiftproblem



  • So hab jetzt den Rechtsshift hinbekommen. Jetzt hab ich noch eine Frage:

    Ich hab diesen Code, der mir aus einem übergebenen BitVector ein Teilwort extrahieren soll. Kann das so funktionieren?

    testchar.bits[0] = 128;
    	for(int i=0; i<n; i=i+1)
    	{
    		*testchar.bits = *testchar.bits >> pos+i;
    
    		if(((bv_neu.bits[pos/8]) & *testchar.bits) == *testchar.bits)		//prüfen, ob BitVector an der
    		{													//Bit-Stelle mit Testchar übereinstimmt
    			maske.bits[i/8] = maske.bits[i/8] | (1 << (n-i-1)%8);
    		}
    	}
    

    Könnt ihr mir helfen?



  • Wenn ich mir z.B. nun ein 2-Elemente Array erstellen lasse, dann hab ich ja quasi vor der for-Schleife das hier drin stehen:

    10000000000000000

    Mit der zeile

    *testchar.bits = *testchar.bits >> pos+i;
    

    möchte ich nun über Pointer den 1er so verstellen, dass er mir auf die Stelle rückt, die mir "pos" angibt... Aber irgendwie funktioniert das noch nicht. Nach der ersten iteration der schleife passts nicht mehr...

    Wisst ihr woran das liegt?



  • Kann mir denn niemand helfen?



  • Hallo.

    Ich bräuchte wirklich dringend eure Hilfe!



  • Ignoriert ihr mich? Oder wollt ihr mir einfach nicht helfen? Wenn das Fall der ist, dann schließt doch einfach den Thread, dann weiß ich wenigstens was los ist!



  • Wie würdest Du es denn als Computersimulator machen? Also Du kannst nur die elemetaren Befehle, die der Computer auch kann und machst es mit Zettel un Papier.



  • Glaub mir bitte, das hab ich alles schon durch. Ich weiß nicht was falsch ist, sonst hätte ich ja hier keine Frage gestellt. Mittlerweile sieht der Code so aus:

    int auswahl = 0;
    	testchar.bits[auswahl] = 128;
    	*testchar.bits = *testchar.bits >> pos-1;
    	for(int i=0; i<n; i=i+1)
    	{
    		testchar.bits[auswahl] = testchar.bits[auswahl] >> 1;
    
    		if(testchar.bits[auswahl] == 0)
    		{
    			auswahl = auswahl + 1;
    			testchar.bits[auswahl] = 128;
    		}
    
    		if(((bv_neu.bits[pos/8]) & *testchar.bits) == testchar.bits[auswahl])
    		{
    			maske.bits[i/8] = maske.bits[i/8] | (1 << (n-i-1)%8);
    		}
    	}
    


  • Von welchem Typ sind denn deine Variablen?



  • das sind alles char-Arrays....



  • Schon mal dran gedacht das char i.A. signed ist und 0b1000000 = -128 ist.
    Da wird der arithmetische Shift genommen. Der schiebt das Vorzeichen mit.



  • Sollte ich dann also unsigned char nehmen?



  • Ähm, sorry sehe gerade, dass ich ja unsigned char in meiner Struktur verwende. Also an dem kann's nicht liegen. Funktinoieren tuts trotzdem noch nicht


Anmelden zum Antworten