int i = 65537;
char c = (char) i;
printf("%d", c);
ich "1" aus, dass immer und ich frage mich, warumKonvertieren von nicht vorhandenen ASCII-Zeichen in int in C
int i = 65537;
char c = (char) i;
printf("%d", c);
ich "1" aus, dass immer und ich frage mich, warumKonvertieren von nicht vorhandenen ASCII-Zeichen in int in C
Meist int 32 Bit hat, während char nur 8 Bit. Wenn Sie int in char umwandeln, werfen Sie die restlichen 24 Bits weg. Das Ergebnis ist nicht definiert.
Das Ergebnis ist definiert, implementierungsdefiniert. – 2501
Nein, du liegst falsch, was ist, wenn du die Konstante änderst? Wir könnten auch negative Zeichen bekommen. Ich sagte, dass es nicht definiert ist, da die Ausgabe nichts mit der Eingabe zu tun hat. Aber du kannst es berechnen. –
Vergessen Sie außerdem nicht die Endian-Byte-Reihenfolge. Sie wissen nicht, welche Plattformen Sie ausführen. Big-Endian und Little-Endian werden zu unterschiedlichen Antworten führen. –
i
definiert ist int
(32 Bits) der Wert in binär 65537 = 10000000000000001
wenn c = (char)
i der Wert abgeschnitten wird, weil C in 8 Bits ist so c c = 00000001
so c = 1
Das ist nur eine Möglichkeit, es zu implementieren. Das Ergebnis kann anders sein. – 2501
Was erwarten sein? –
'65537% 256 = ????';) – LPs
65537 ist 0x10001 – BLUEPIXY