shift mit Rotation
-
Hi!
kann jemand mir weiter helfen?
int main()
{
char E=0x11;char A=0x00;
char tmp=0x00;
char Test=0x00;A= E ^ 0xD3;
printf("\nPIN (low) xor D3: %x \n\n", A);
tmp = A << 2;
printf("\ntmp (low): %u \n", (int)tmp);printf("\nA: %x \n\n", A);
Test =A >> 6; // ich kriege hier immer falsche ergebnisse
// und zwar anstatt 3 kriege ich immer ffffffff
// weiss jemand warum? Danke!printf("\nTest: %x \n", Test);
A |= tmp;
printf("\nA: %x \n", A);
return 0;
}
-
Der Grund liegt im Datentyp der Variablen.
char ist meistens 8 bit gross
und
int 16 bitDer Befehl
tmp = A << 2;
hat als Ergebnis die Binärzahl
1100001000
Diese hat aber 10 Stellen, also 10 bit.
Das passt nicht in das 8 bit große char hinein,
weshalb die meisten Compiler und Systeme
einfach nur die ersten 8 bit (Stellen) von rechts nehmen.Deshalb wird bei char tmp zu 00001000 was 0x8 entspricht.
D.h. die beiden Einsen ganz links werden einfach abgeschnitten.Nimmt man den Datentyp int, ist genug Platz und
tmp wird zu 0x308Ersetze also das char durch int
-
Hallo DDuelec,
das stimmt, das liegt an meine Variable deklaration.
Dankeschoen!
Gruss
Phuoc