Tipi Char, Short, Int e Long

char #

Il tipo char prende 1 byte di memoria (8 bit) e consente di esprimere in notazione binaria 2^8=256 valori. Il tipo char può contenere valori sia positivi che negativi. L'intervallo di valori va da -128 a 127.

uchar #

Il tipo intero uchar occupa anche 1 byte di memoria, così come il tipo char, ma a differenza da esso, uchar è designato solo per i valori positivi. Il valore minimo è zero, il valore massimo è 255. La prima lettera u del nome del tipo uchar è l'abbreviazione di unsigned.

short #

La dimensione del tipo short è 2 byte (16 bit) e, di conseguenza, consente di esprimere l'intervallo di valori pari a 2 alla potenza di16: 2^16=65 536. Siccome il tipo short è con il segno, e contiene i valori sia positivi che negativi, l'intervallo di valori è compreso tra -32 768 e 32 767.

ushort #

Il tipo short senza segno, è il tipo ushort, che anche, ha una dimensione di 2 byte. Il valore minimo è 0, il valore massimo è 65 535.

int #

La dimensione del tipo int è di 4 byte (32 bit). Il valore minimo è di -2 147 483 648, quello massimo è di 2 147 483 647.

uint #

Il tipo intero senza segno è uint. Ci vogliono 4 byte di memoria e consente di esprimere interi da 0 a 4 294 967 295.

long #

La grandezza del tipo long è di 8 byte (64 bit). Il valore minimo è -9 223 372 036 854 775 808, il valore massimo è di 9 223 372 036 854 775 807.

ulong #

Il tipo ulong anche, occupa 8 byte e può memorizzare i valori da 0 a 18 446 744 073 709 551 615.

Esempi:

char  ch=12;
short sh=-5000;
int   in=2445777;

Poiché i tipi interi senza segno non sono designati per memorizzare i valori negativi, il tentativo di impostare un valore negativo può portare a conseguenze inaspettate. Un tale semplice script porterà ad un ciclo infinito:

//--- Loop infinito
voidOnStart()
  {
   uchar  u_ch;
 
   for(char ch=-128;ch<128;ch++)
     {
      u_ch=ch;
      Print("ch = ",ch," u_ch = ",u_ch);
     }
  }

La variante corretta è:

//--- Variante corretta
voidOnStart()
  {
   uchar  u_ch;
 
   for(char ch=-128;ch<=127;ch++)
     {
      u_ch=ch;
      Print("ch = ",ch," u_ch = ",u_ch);
      if(ch==127) break;
     }
  }

Risultato:

   ch= -128  u_ch= 128
   ch= -127  u_ch= 129
   ch= -126  u_ch= 130
   ch= -125  u_ch= 131
   ch= -124  u_ch= 132
   ch= -123  u_ch= 133
   ch= -122  u_ch= 134
   ch= -121  u_ch= 135
   ch= -120  u_ch= 136
   ch= -119  u_ch= 137
   ch= -118  u_ch= 138
   ch= -117  u_ch= 139
   ch= -116  u_ch= 140
   ch= -115  u_ch= 141
   ch= -114  u_ch= 142
   ch= -113  u_ch= 143
   ch= -112  u_ch= 144
   ch= -111  u_ch= 145
    ... 

Esempi:

//--- Valori negativi non possono essere memorizzati in tipi senza segno
uchar  u_ch=-120;
ushort u_sh=-5000;
uint   u_in=-401280;

Esadecimale: numeri 0-9, le lettere a-f o A-F per i valori di 10-15, iniziano con 0x o 0X.

Esempi:

0x0A0x120X120x2f0xA30Xa30X7C7

Per le variabili intere, i valori possono essere impostati in forma binaria utilizzando il prefisso B. Ad esempio, è possibile codificare le ore di lavoro di una sessione di trading in variabile di tipo int ed utilizzare le informazioni su di esse secondo l'algoritmo richiesto:

//+--------------------------------------------------------------------------------+
//| Funzione di avvio del programma Script |
//+--------------------------------------------------------------------------------+
voidOnStart()
  {
//--- imposta 1 per le ore di lavoro e 0 per quelle non lavorative
   int AsianSession   =B'111111111'// Sessione Asiatica da 00:00 alle 9:00
   int EuropeanSession=B'111111111000000000'// Sessione Europea 9:00 - 18:00
   int AmericanSession =B'111111110000000000000011'// Sessione Americana 16:00 - 02:00
//--- derive numerical values of the sessions
   PrintFormat("Ore della sessione Asiatica come valore =%d",AsianSession);
   PrintFormat("Ore della sessione Europea come valore è %d",EuropeanSession);
   PrintFormat("Ore della sessione Americana come valore è %d %d",AmericanSession);
//--- e ora visualizziamo le rappresentazioni stringa delle ore di lavoro delle sessioni '
   Print("Sessione Asiatica ",GetHoursForSession(AsianSession));
   Print("Sessione Europea ",GetHoursForSession(EuropeanSession));
   Print("Sessione Americana ",GetHoursForSession(AmericanSession));   
//---
  }
//+--------------------------------------------------------------------------------+
//| restituisce le ore di lavoro della sessione come stringa             |
//+--------------------------------------------------------------------------------+
string GetHoursForSession(int session)
  {
//--- al fine di verificare, usale l'orperazione bit AND e slittamenti sinistro di 1 bit <<=1
//--- avviare il controllo dal bit più basso
   int bit=1;
   string out="ore lavorative: ";
//--- controlla tutti i 24 bit a partire da quello zero e fino a 23, inclusivamente  
   for(int i=0;i<24;i++)
     {
      //--- riceve lo stato dei bit in numeri
      bool workinghour=(session&bit)==bit;
      //--- aggiunge il numero di ore al messaggio
      if(workinghour )out=out+StringFormat("%d ",i); 
      //--- slitta di un bit a sinistra e controlla il valore di quello successivo
      bit<<=1;
     }
//--- stringa risultato
   return out;
  }

Vedi anche

Typecasting