Heim  >  Artikel  >  Backend-Entwicklung  >  So führen Sie eine erzwungene Typkonvertierung in der C-Sprache durch

So führen Sie eine erzwungene Typkonvertierung in der C-Sprache durch

青灯夜游
青灯夜游Original
2021-04-25 16:43:5948308Durchsuche

In der C-Sprache können Sie eine erzwungene Typkonvertierung über die Anweisung „(neuer Typname) Daten oder Ausdruck“ durchführen. Beispielsweise konvertiert „(float) 100“ den Wert 100 (Standard in int-Typ) in den Typ „float“. (int)(x+y)“ dient dazu, das Ergebnis des Ausdrucks „x+y“ in einen Ganzzahltyp umzuwandeln.

So führen Sie eine erzwungene Typkonvertierung in der C-Sprache durch

Die Betriebsumgebung dieses Tutorials: Windows 7-System, c99-Version, Dell G3-Computer.

Bei der Datentypkonvertierung werden Daten (Variablen, Werte, Ergebnisse von Ausdrücken usw.) von einem Typ in einen anderen Typ konvertiert.

Die C-Sprache verfügt über zwei Datentypmethoden:

  • Automatische Typkonvertierung: Es handelt sich um eine Datentypkonvertierung, die stillschweigend, implizit und heimlich vom Compiler durchgeführt wird. Diese Konvertierung erfordert kein Eingreifen des Programmierers und erfolgt automatisch.

  • Erzwungene Typkonvertierung

Die automatische Typkonvertierung ist das Ergebnis der eigenen Beurteilung des Compilers basierend auf dem Kontext des Codes. Manchmal ist sie nicht so „intelligent“ und kann nicht alle Anforderungen erfüllen. Bei Bedarf können Programmierer auch explizit eine Typkonvertierung im Code selbst vorschlagen, was als erzwungene Typkonvertierung bezeichnet wird.

Die automatische Typkonvertierung ist eine vom Compiler stillschweigend und implizit durchgeführte Typkonvertierung, die sich nicht im Code widerspiegeln muss. Die erzwungene Typkonvertierung ist eine vom Programmierer explizit vorgeschlagene Typkonvertierung, die über ein bestimmtes Codeformat angegeben werden muss Typkonvertierung. Mit anderen Worten: Die automatische Typkonvertierung erfordert kein Eingreifen des Programmierers, während die obligatorische Typkonvertierung ein Eingreifen des Programmierers erfordert.

Das Format der erzwungenen Typkonvertierung ist:

(type_name) expression

type_name ist der neue Typname und expression ist der Ausdruck. Zum Beispiel:

(float) a;  //将变量 a 转换为 float 类型
(int)(x+y);  //把表达式 x+y 的结果转换为 int 整型
(float) 100;  //将数值 100(默认为int类型)转换为 float 类型

Das Folgende ist ein klassisches Beispiel, das eine Konvertierung des Umwandlungstyps erfordert:

#include <stdio.h>
int main(){
    int sum = 103;  //总数
    int count = 7;  //数目
    double average;  //平均数
    average = (double) sum / count;
    printf("Average is %lf!\n", average);
    return 0;
}

Betriebsergebnisse:

Average is 14.714286!

sum und count sind beide int-Typen. Wenn kein Eingriff durchgeführt wird, gilt sum / countCode> Das Operationsergebnis ist ebenfalls vom Typ int, und der Dezimalteil wird verworfen. Obwohl der Durchschnitt vom Typ double ist und den Dezimalteil empfangen kann, reicht dies nicht aus, der Dezimalteil wird im Voraus „kastriert“. Es kann nur den ganzzahligen Teil empfangen. Das Ergebnis der Divisionsoperation ist stark verzerrt. <code>sum / count的运算结果也是 int 类型,小数部分将被丢弃;虽然是 average 是 double 类型,可以接收小数部分,但是心有余力不足,小数部分提前就被“阉割”了,它只能接收到整数部分,这就导致除法运算的结果严重失真。

既然 average 是 double 类型,为何不充分利用,尽量提高运算结果的精度呢?为了达到这个目标,我们只要将 sum 或者 count 其中之一转换为 double 类型即可。上面的代码中,我们将 sum 强制转换为 double 类型,这样sum / count的结果也将变成 double 类型,就可以保留小数部分了,average 接收到的值也会更加精确。

在这段代码中,有两点需要注意:

  • 对于除法运算,如果除数和被除数都是整数,那么运算结果也是整数,小数部分将被直接丢弃;如果除数和被除数其中有一个是小数,那么运算结果也是小数。

  • ( )的优先级高于/,对于表达式(double) sum / count,会先执行(double) sum,将 sum 转换为 double 类型,然后再进行除法运算,这样运算结果也是 double 类型,能够保留小数部分。注意不要写作(double) (sum / count),这样写运算结果将是 3.000000

    Da der Durchschnitt ein doppelter Typ ist, warum nicht den vollen Nutzen daraus ziehen und versuchen, die Genauigkeit der Operationsergebnisse zu verbessern? Um dieses Ziel zu erreichen, müssen wir nur einen der Typen „sum“ oder „count“ in den Typ „double“ umwandeln. Im obigen Code erzwingen wir die Konvertierung der Summe in den Double-Typ, sodass das Ergebnis von sum / count ebenfalls den Double-Typ annimmt und der Dezimalteil beibehalten werden kann und der durch den Durchschnitt empfangene Wert erhalten bleibt genauer.
In diesem Code sind zwei Punkte zu beachten:


Wenn bei Divisionsoperationen sowohl der Divisor als auch der Dividend Ganzzahlen sind, ist das Ergebnis der Operation ebenfalls eine Ganzzahl und der Dezimalteil wird direkt verworfen. Wenn entweder der Divisor oder der Dividend eine Dezimalzahl ist, ist das Ergebnis der Operation ebenfalls eine Dezimalzahl.

🎜🎜🎜( ) hat eine höhere Priorität als / Für den Ausdruck (double) sum / count wird ausgeführt Konvertieren Sie zuerst die (doppelte) Summe, konvertieren Sie die Summe in den doppelten Typ und führen Sie dann eine Divisionsoperation durch, sodass das Operationsergebnis ebenfalls vom doppelten Typ ist und der Dezimalteil beibehalten werden kann. Achten Sie darauf, nicht (double) (sum / count) zu schreiben, da sonst das Ergebnis der Operation 3.000000 ist und der Dezimalteil trotzdem nicht erhalten bleibt. 🎜🎜🎜🎜Verwandte Empfehlungen: „🎜C-Sprachvideo-Tutorial🎜“🎜🎜

Das obige ist der detaillierte Inhalt vonSo führen Sie eine erzwungene Typkonvertierung in der C-Sprache durch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn