Betrachten Sie dieses kleine Stück Code:
%Vor% Auf meinem PC druckt es 0x01 und ich bin nicht überrascht.
Wie würde es bei BIG ENDIAN funktionieren? Ich erwarte, dass es 0x10000001
drucken würde. Habe ich recht?
Ich habe Bücher und Web durchsucht, aber ich habe keine klaren Informationen darüber gefunden, wie die Casting-Operation wirklich mit der Erinnerung umgeht.
Nein, das Casting wie das in Frage stehende speichert den Wert wenn möglich und hängt nicht von der Speicherdarstellung ab.
Wenn Sie die Speicherdarstellung neu interpretieren möchten, müssen Sie Zeiger umsetzen. Dann wird es auf Endianess abhängen:
%Vor%Zahlen sind keine Groß- oder Kleinendianer. Sequenzen von Bytes sind Big- oder Little-Endian. Zahlen sind nur Zahlen.
C numerische Typen befassen sich wenig überraschend mit Zahlen , nicht mit Sequenzen von Bytes .
Nein. Endianness spielt in diesem Beispiel keine Rolle. Konvertieren in char (vorausgesetzt, ein Zeichen ist schmaler als ein int), werden die niederwertigen Bits beibehalten, und niederwertigere Bits sind niederwertigere Bits, unabhängig davon, wie sie im Speicher gespeichert sind.
C ++ - Standard besagt Folgendes:
5.2.3.1 Ein Simple-Type-Specifier (7.1.5), gefolgt von einer in Klammern gesetzten Ausdruckliste, konstruiert einen Wert des angegebenen Typs unter Berücksichtigung der Ausdrucksliste.
Also ja, es konstruiert eine neue Instanz, die den breiteren Typ zu einem kürzeren Typ herabsetzt, ungeachtet der binären Darstellung. Wenn Sie also an einem exakten Teil des int interessiert sind, der an char übergeben werden soll, verwenden Sie den bitweisen Verschiebungsoperator - er ist plattformunabhängig und erzeugt vorhersagbare Ergebnisse.
Tags und Links c casting endianness