[Embedded C] Erzwungene Typkonvertierung

Typkonvertierung:
  Niedrig nach hoch: Fortsetzung, höchste Bitfüllung;
  Hoch nach niedrig: Kürzung
   Durch die Verwendung von Direct Cast wird das Symbol nicht entfernt.

Typkonvertierung zwischen Variablen gleicher Länge

Wenn beispielsweise verschiedene Typen gleicher Länge ineinander konvertiert werden, wird shortshort zu unsigned shortunsigned short gezwungen. Tatsächlich ist der konvertierte unsigned shortunsigned short während des Konvertierungsprozesses derselbe wie die binäre Darstellung des ursprünglichen shortshort im Computer. Was sich ändert, ist nur die Art und Weise, wie sie interpretiert werden.

Das Ergebnis der Umwandlung lässt die Bitwerte unverändert und ändert lediglich die Art und Weise, wie die Bits interpretiert werden.

short a = -4321;
unsigned short ua = (unsigned short)a;  //  这里进行强制类型转换 ua的真值是61215

Typkonvertierung zwischen Variablen unterschiedlicher Länge

Konvertierung einer Variablen mit langer Wortlänge in eine Variable mit kurzer Wortlänge

Das System schneidet die überschüssige Wortlänge höherer Ordnung direkt ab und weist den niederwertigen Teil direkt zu.

u16 exmple = 1000 0000 1111 0000;
u8 res;
res = (u8)exmple;
//res的值就是1111 0000

Bei der Konvertierung einer Variablen mit kurzer Wortlänge in eine Variable mit langer Wortlänge wird auch der höherwertige Teil erweitert原数字的符号位

Wenn sich die kurze Wortlänge in eine lange Wortlänge verwandelt, sind nicht nur die entsprechenden Bitwerte gleich, sondern der höherwertige Teil wird auch zum Vorzeichenbit der ursprünglichen Zahl erweitert;

Umgang mit negativen Zahlen

Binäres Problem mit negativen Zahlen: Wir verwenden negative Zahlen补码,原码, um die umgekehrte Transformation durchzuführen反码, und Addiere das 1er-Komplement zum Zweierkomplement.

Zum Beispiel ist 1 0000 0001
Der ursprüngliche Code von -1: 1000 0001
Der umgekehrte Code: 1111 1110< a i=3> Komplementcode: 1111 1111 und wenn -1 verwendet wird, ist es 1111 1111

Wenn dann -1 vom Typ char auf unsigned char erzwungen wird, ist das Ergebnis 1111. 1111 wird als 255 interpretiert.

Das Ergebnis der Umwandlung lässt die Bitwerte unverändert und ändert lediglich die Art und Weise, wie die Bits interpretiert werden.

Wenn dann die Umwandlung von -1 des Typs char in einen unsigned unsigned short erzwungen wird, ist das Ergebnis 1111 1111 1111 1111, was als 65535 interpretiert wird.

Der höherwertige Teil wird auch auf das Vorzeichenbit der Originalzahl erweitert!

Durch die direkte Verwendung von cast werden die Symbole nicht entfernt

Der Typ int32 wird im Code verwendet, um dem Typ uint64 den Dezimalwert 2147483648 (0x8000 0000) zuzuweisen. In der Binärdatei des Typs int32 ist das höchste Bit 1, was als Komplement ausgedrückt wird. Beim Zuweisen eines Werts vom Typ Int32 zum Typ uint64 gibt es zwei Prozesse: ① Aktualisieren Sie int32 auf int64. Zu diesem Zeitpunkt werden alle zusätzlichen höchsten Bits mit 1 gefüllt und es wird 0xffffffff80000000. ② Konvertieren Sie dabei int64 in uint64 Zeit Der Dezimalwert ist 18446744071562067968. Der Wert ist also viel größer als 2147483648.

Supongo que te gusta

Origin blog.csdn.net/apythonlearner/article/details/133876041
Recomendado
Clasificación