Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Re: Typkonvertierung Typen Umwandlung Kategorie: Programmierung (von André H. - 2.09.2011 17:14)
Als Antwort auf Typkonvertierung Typen Umwandlung von Alfred - 1.09.2011 14:27
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, C-Control II Station, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.1
Hallo Alfred,

> Aber über die Typen Umwandlung habe ich nur was in String gefunden, ich suche aber eine
> Möglichkeit ein long in einen int zu konvertieren.
> Dies benötige ich um eine genauere Berechnung(long)durch zuführen und nachher wird das
> Ergebnis geteil und als int abspeichern. Wo ich dann schön die function pcflcd.zahl5n2 benutze kann.
> In C, Typkonvertierung long l=500; int i=l; "expliziter"
> Das hat aber leider nicht funktioniert.

Die Konvertierung funktioniert prinzipiell implizit über den Compiler.
D.h., wenn ein Long-Wert in einem Integer gespeichert werden soll, werden entsprechend
die oberen Bits abgeschnitten.

Bei Berechnungen muÃ? man entsprechend aufpassen, da bei der CC2 prinzipiell erstmal
alles in 16Bit gerechnet wird.
Es wird erst in 32Bit gerechnet, wenn mind. einer der Beiden Operanden einer Berechnung
oder Teilberechnung vom 32Bit-Typ ist.

Wenn man mit Konstanten Werten arbeitet, ist die Reihenfolge u.U. ausschlaggeben.
Als Bsp.:
long x; int y;
...
x = y * 20000 * 100;

Hier wird alles in 16 Bit gerechnet.
x = 20000 * 100 * y;
Hier schlägt die Optimierung des Compilers zu, in dem dieser schon beim Kompilieren
die ersten beiden Zahlen berechnet. Somit entseht eine Long-Konstante.
Somit wird gleich in 32Bit gerechnet.

Man kann sich bei solchen Konstrukten damit behelfen, eine Berechnung von Konstanten in
Klamern zu setzen, auch wenn das rein mathematisch nicht notwendig wäre:
x = y * (20000 * 100);
Hier optimiert der Compiler ebenfalls die beiden Konstanten Ausdrücke, indem er diese
bereits beim Kompilieren zu einem Long-Wert berechnet.

Um nun explizit den Datentyp Long zu erzwingen, kann man entweder die oder einen Operand
voher in eine Longvariable kopieren oder ein explizites Cast anwenden:
x = cast.intLong(y) * 20000 * 100;


> ps:
> Inkrementieren i++; ++i; gibt es in C2 nicht?

Naja, C2 ist eben kein C, sondern nur daran angelehnt bzw. ein sehr einfach gehaltener C-Dialekt.
Daher kommt man i=i+1; nicht herum. :-)

MfG André H.



Antworten bitte nur ins Forum!
Fragen per EMail auf Forum-Postings werden nicht beantwortet!

Das macht meine Heizung gerade


    Antwort schreiben


Antworten:

Re: Typkonvertierung Typen Umwandlung (von Alfred - 2.09.2011 20:54)