problem mit schieben "<< / >>"



  • Ich hab ein problem mit dem verständnis zur operation schieben.

    Ich hab mehrere Daten, aus einem Array, die ich zu einer zusammenfügen eill (und zwar zusammenhängend). Dazu hab ich halt den befehl schieben gefunden.
    Nur leider keine erklätung oder sonstiges dazu.

    Syntax ist ja a<<b bzw a>>b. wobei b ja die anzahl an bits ist, die geschoben werden soll. Nur hab ich leider keinen plan...

    ich habs so probiert:

    for(...)
      a[0] >> 1 = b[l]
    

    aber er sagt mir, dass "=" nicht zulässig ist.
    ???

    Schreib ich das falsch oder mach ich einen grundlegenden fehler?
    Gibts noch eine andere Variante, außer diese hier?

    Wäre über hilf sehr dankbar.



  • Probiers mal so:

    for(...){
    
      a[0]= b[1];
      b[1]>>1;
    
    }
    


  • << und >> sind bitshift-Operatoren. Das heißt, der Ausdruck a>>1 liefert den Wert der Variablen a, um ein Bit nach links verschoben, zurück. Diesem Wert kannst du nichts zuweisen, aber du kannst mit ihm weiter rechnen, z.B.:

    for(i=0;i<n;++i)
      a[0] = (a[0]<<1) | b[i];
    

    PS: Nebenbei sind die Operatoren noch zur Aus- bzw. Eingabe über IOStreams überladen, aber das ist eine andere Geschichte.



  • Damit ich das richtig verstaden hab:

    ICh hab ne var a[0] die leer ist.

    dann sag ich ich will a[0]>>1, also um 1 nach recht schieben um da dann den wert von b[i] reinzutragen ?

    also mach ich dann aus a[0] = 0 -> a[0] = 10011001 (z.B.) wenn ich ne for() 8x laufen lasse mit den daten aus b[i]?



  • Da mußt du nicht a[0] nach rechts schieben, sondern b[i] nach links:

    for(i=0;i<8;++i) a[0] |= b[i]<<i;
    

    (Anmerkung: Durch das | werden die neuen Bits mit den vorhandenen Einträgen verkoppelt)



  • aasooooo...ich muss den wert zum schieben auch anpassen.
    Na dass muss einem doch geagt werden ^^

    na dann werd ich das map probieren obs auch so geht wie ich will.

    Hab nämlich einzelne Pixelwerte aus dem bild (b/w also 1/0) und muss die ja nun zu einem Byte jeweils zusammenpacken.


Anmelden zum Antworten