Hey,
ich weiß nicht ob ich gerade ein Brett vor dem Kopf habe oder es einfach total falsch ist. Ich möchte eine Zahl Bit für Bit verschieben. Das klappt auch alles nur wenn ich mir das ganze mit Serial.println ausgeben lasse kriege ich nach 128<<1 die Zahl 32512
eigentlich wäre es ja 64 bei einmal schieben...
int zeit(1000);
int buchstabe[]={0,0,0,127,127,0,0,0};
for(int y=8;y>=0;y--)
{
for(int i=0; i<=7; i++)
{
maxSingle(i+1,buchstabe[i]<<y);
delay(zeit);
Serial.println(buchstabe[i]<<y);
}
Serial.println("--------");
delay(zeit+zeit);
}
ich hoffe ihr könnt mir helfen.
Schöne Grüße
Fl3xizzz
Links verschieben = Multiplikation (z.B. 16 << 1 = 32)
Rechts verschieben = Division (z.B. 16 >> 1 = 8)
Du schiebst nach links. Das ist eine Multiplikation mit 2. Nach rechts schieben ist eine Division durch 2. 128<<1 sollte 256 sein.
Dein Fehler liegt aber glaube ich in den for-Schleifen. Die schiebst erst 8 mal. Dann 7 mal. Dann 6 mal...
int ist übrigens signed/Vorzeichen-behaftet. Mach da mal unsigned in draus, sonst kann es Probleme mit dem Vorzeichen-Bit geben. Vor allem bei Rechts-Shifts.
moment jetzt stehe ich auf dem Schlauch 
kannst du das noch mal genauer erklären?
Du zählst y von 8 auf 0. Und dann verschiebst du die Bits um y
Wenn du jede Zahl schrittweise nur um 1 Bit schieben willst, solltest du sowas ähnliches machen:
for(int i=0; i < 8 ;i++)
{
for(int j=0; j < 16; j++) //oder 8, dann kannst du aber auch gleich als Datentyp byte verwenden
{
Serial.println(buchstabe[i]<<1);
delay(zeit);
}
Serial.println("--------");
}