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

Re: if-Abfrage bei Datentyp long Kategorie: Programmierung (von André H. - 11.11.2004 23:16)
Als Antwort auf Re: if-Abfrage bei Datentyp long von Thomas - 11.11.2004 22:00
Ich nutze:
C-Control II Unit, C164CI-ControllerBoard, CC2-Application-Board, CC2-StarterBoard, CC2-ReglerBoard, OSOPT V3.0
Hallo Tomas,

> > Ob man jetzt schreibt,
> > if x tuedies();
> > oder
> > if x!=0 tuedies();
> > ist völlige egal. Beides bedeutet das identische !
> > Nur dauert die zweite Abfrage länger, weil unnötigerweise zwei VM-Codes mehr benötigt werden.
>
> wenn ich den Code des Compilers richtig verstehe, enthält der generierte VM-Code im zweiten Fall
> einen CAST-Operator. Im ersten, bei dem Literal, scheint INT default zu sein.

Hier liegst zu ziemlich richtig.
CAST ist bei der VM kein richtiger Operator. Zumindest kein extra VM-Code.
Es ist eher ein Parameter, der dem eigentlichen Operator mit angegeben wird, damit
die VM-Routine "weiÃ?" mit welchen Datentyp sie arbeiten soll.

Ein CAST-Parameter ist nur bei folgenden VM-Codes möglich:
const VM_ADD                      = ( VM_CODE_B |  5 );
const VM_SUB                      = ( VM_CODE_B |  6 );
const VM_MUL                      = ( VM_CODE_B |  7 );
const VM_DIV                      = ( VM_CODE_B |  8 );
const VM_MOD                      = ( VM_CODE_B |  9 );
const VM_EQU                      = ( VM_CODE_B | 10 );
const VM_NEQU                     = ( VM_CODE_B | 11 );
const VM_HI                       = ( VM_CODE_B | 12 );
const VM_HIS                      = ( VM_CODE_B | 13 );
const VM_LO                       = ( VM_CODE_B | 14 );
const VM_LOS                      = ( VM_CODE_B | 15 );
const VM_AND                      = ( VM_CODE_B | 16 );
const VM_NAND                     = ( VM_CODE_B | 17 );
const VM_OR                       = ( VM_CODE_B | 18 );
const VM_NOR                      = ( VM_CODE_B | 19 );
const VM_XOR                      = ( VM_CODE_B | 20 );
const VM_NXOR                     = ( VM_CODE_B | 21 );
const VM_SHL                      = ( VM_CODE_B | 22 );
const VM_SHR                      = ( VM_CODE_B | 23 );
const VM_ASR                      = ( VM_CODE_B | 24 );
const VM_ROL                      = ( VM_CODE_B | 25 );
const VM_ROR                      = ( VM_CODE_B | 26 );
const VM_MIN                      = ( VM_CODE_B | 27 );
const VM_MAX                      = ( VM_CODE_B | 28 );

  const CALC_INT_INT              = 0;
  const CALC_INT_LONG             = 1;
  const CALC_INT_FLOAT            = 2;
  const CALC_LONG_INT             = 3;
  const CALC_LONG_LONG            = 4;
  const CALC_LONG_FLOAT           = 5;
  const CALC_FLOAT_INT            = 6;
  const CALC_FLOAT_LONG           = 7;
  const CALC_FLOAT_FLOAT          = 8;


Es heiÃ? thier eben nur "CALC".
Dieser Parameter wird als Highbyte des VM-Codes angegeben.
Der VM-Code selbst belegt lediglich das Lowbyte.

Es ist immer wieder interessant, in das Modul vmcodes.c2 rein zu schauen.
Denn daraus kann man einiges über die Funktion der VM lernen. ;-)

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: if-Abfrage bei Datentyp long (von Thomas - 11.11.2004 23:57)
    Re: if-Abfrage bei Datentyp long (von André H. - 19.11.2004 11:41)
        Re: if-Abfrage bei Datentyp long oder float (von krassos - 7.11.2005 15:32)