Ich versuche, eine unsigned Char durch 'n' Bits zu drehen. Aber ich bekomme nicht das gewünschte Ergebnis. Dies ist mein CodeDrehung von unsigned Char von n Bits
void left_rotate(unsigned char a, int no){
// no - number of times to rotate
printf("%d\n", ((a << no) | (a >> (8-no))));
}
ich diese Funktion von Mail nenne als
unsigned char a = 'A';
left_rotate(a, 2);
ich die folgende Ausgabe
//'A' = 65 = 01000001
// I am rotating in left direction by two times
// a << 2 = 00000100
// a >> 6 = 00000001
(00000100 | 00000001 = 00000101 = 5 in decimal)
erwartet folgt Aber ich habe eine andere Ausgabe
// The output in my screen = 100000101 = 261 in decimal
Wie hat dass 1 in MSB kriechen? Ich verwende ein vorzeichenloses Zeichen als Datentyp. Also sollte es nicht 8 Bits überschreiten. Kann mir bitte jemand das erklären?
Dank
Chid
Sie wechseln in (oder durch) das Vorzeichen eines signierten Typs ('char'). Dies ist ** undefiniertes Verhalten **. Verwenden Sie stattdessen 'unsigned char'. – WhozCraig
@WhozCraig Wo verschiebt er einen signierten "char"? –
@ H2CO3 in meinem Kaffee-entzogenen intellektuell beschlagenen Kopf. Danke, dass du mich ehrlich gehalten hast, Sir = P – WhozCraig