/ / Casting und Ganzzahlkonvertierung Verwirrung - c

Casting und Integer Conversion Verwirrung - c

ich fühle mich wie 6.3.1.3 Standard ist bereits in enthalten 6.3.1.8

aber lesen:

Andernfalls wird der neue Typ signiert und der Wert kann nicht dargestellt werden drin; Entweder ist das Ergebnis implementierungsdefiniert oder ein implementierungsdefiniertes Signal wird ausgelöst.

Es wird dieser Fall dort nicht erwähnt. Also ist 6.3.1.3 für ganzzahlige Werbeaktionen nur und wenn es Casting gibt, was ist die Reihenfolge der Konvertierung. Ist es Beförderung und dann Gießen oder Gießen dann Beförderungen oder nur Gießen.

Antworten:

2 für die Antwort № 1

Es gibt eine Reihe von Umständen, unter denen ein C-Compiler Code zum Konvertieren eines Datentyps in einen anderen einfügt. Diese schließen ein explizite Konvertierungen vom Cast-Operator durchgeführt, und eine Reihe impliziter Konvertierungen. Beide Umwandlungskontexte werden in § 6.3.1 behandelt:

  1. Mehrere Operatoren konvertieren Operandenwerte automatisch von einem Typ in einen anderen. Diese Unterklausel gibt das Ergebnis an, das von einem solchen benötigt wird implizite Konvertierungsowie diejenigen, die aus einem Gussvorgang resultieren (eine explizite Konvertierung).

In Abschnitt 6.3.1.3 wird erläutert, wie die Konvertierungen durchgeführt werden, ohne dass dies angegeben wird wann Die Konvertierungen werden durchgeführt. Dasselbe Verfahren wird sowohl für explizite als auch für implizite Konvertierungen verwendet. Um eine Konvertierung durchzuführen, müssen Sie nur den ursprünglichen Typ und den gewünschten Typ kennen.

§ 6.3.1.8 erläutert, wie der Zieltyp in einigen allgemeinen Kontexten ausgewählt wird, ohne den Algorithmus für die Konvertierung anzugeben. Die beiden Klauseln ergänzen sich also vollkommen. Einer beschreibt, wie eine Konvertierung durchgeführt wird, und der andere beschreibt, welche Konvertierung durchgeführt wird.

§6.3.1.8 gilt für bestimmte Rechenoperatoren, deren Operanden vom gleichen Typ sein müssen. (Wie erwähnt gilt diese Klausel nicht für alle Rechenoperatoren und Sie müssen das lesenBeschreibung der einzelnen Operatoren, um die Ausnahmen anzuzeigen.) Es ist zu beachten, dass der Algorithmus zum Auswählen der Zieltypen für beide Operanden nur zu "verbreiterten" Konvertierungen führt. Der Zieltyp ist immer so breit oder breiter als der Originaltyp. Es ist möglich, dass eine vorzeichenbehaftete Ganzzahl in eine vorzeichenlose Ganzzahl derselben Breite konvertiert wird. Ein vorzeichenloser Typ wird jedoch nur dann in einen vorzeichenbehafteten Typ konvertiert, wenn der vorzeichenbehaftete Typ groß genug ist, um alle Werte des vorzeichenlosen Typs darzustellen.

Die Implementierung von signiert an unsigniertKonvertierungen werden ohne implementierungsdefiniertes Verhalten in §6.3.1.3p2 genau definiert. Daher gilt Absatz §6.3.1.3p3 niemals für die Umwandlungen gemäß Absatz 6.3.1.8. Dies gilt auch für die ganzzahlige Werbeaktionen definiert in §6.3.1.1p2, das durch den in §6.3.1.8 beschriebenen Algorithmus ausgelöst werden kann.

In anderen Kontexten, in denen eine automatische oder explizite Konvertierung stattfindet, können engere Konvertierungen angefordert werden. Wenn das Ziel einer einschränkenden Konvertierung unterschrieben ist, kann §6.3.1.3p3 angewendet werden.