Char, Short, Int ve Long Tipleri

char #

char tipi 1 baytlık bellek işgal eder (8 bit) ve ikili notasyon (2^8=256) değerlerinin ifade edilmesini sağlar. char tipi negatif ve pozitif değerlerin her ikisini de barındırabilir. Değer aralığı -128'den 127'ye kadardır.

uchar #

uchar tamsayı tipi de, char tipi gibi 1 baytlık bellek işgal eder; Ama onun aksine uchar sadece pozitif değerler için düşünülmüştür. En küçük değeri sıfırdır, en büyük değeri ise 255'tir. uchar tipinin isminin önündeki u harfi unsigned (işaretsiz) kelimesinin kısaltmasıdır.

short #

short tipinin büyüklüğü 2 bayttır (16 bit) ve dolayısıyla, 2 üzeri 16'lık (2^16 = 65 536) bir aralıkta yer alan değerlerin ifade edilmesini sağlar. short tipinin işaretli bir tip olması ve hem negatif hem pozitif değerler içermesi nedeniyle, alabileceği değerler -32 768 ve 32 767 arasındadır.

ushort #

İşaretsiz (unsigned) short tipi, ushort tipidir ve yine 2 bayt boyutundadır. En küçük değeri sıfır 0, En büyü değeri 65 535'tir.

int #

Tamsayı int tipinin büyüklüğü 4 bayttır (32 bit). En küçük değer -2 147 483 648, en büyük değer ise 2 147 483 647'dir.

uint #

İşaretsiz (unsigned) tamsayı tipi uint'tir. 4 baytlık belek işgal eder ve 0 - 4 294 967 295 arası tamsayıların ifade edilmesini sağlarlar.

long #

long tipinin büyüklüğü 8 bayttır (64 bit). En küçük değer -9 223 372 036 854 775 808, en büyük değer ise 9 223 372 036 854 775 807'dir.

ulong #

İşaretsiz ulong tipi de 8 bayt yer kaplar ve 0 ile 18 446 744 073 709 551 615 arası değerleri saklayabilirler.

Örnekler:

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

İşaretsiz tamsayı tipleri negatif değerler içerecek şekilde tasarlanmadıkları için negatif değer ile kullanımlarının denenmesi beklenmedik sonuçlar doğurur. Aşağıdaki gibi basit bir betik sonsuz bir döngüye yol açabilir:

//--- Sonsuz döngü
void OnStart()
  {
   uchar  u_ch;
 
   for(char ch=-128;ch<128;ch++)
     {
      u_ch=ch;
      Print("ch = ",ch," u_ch = ",u_ch);
     }
  }

Düzgün versiyon şu şekildedir:

//--- Düzgün versiyon şu şekildedir
void OnStart()
  {
   uchar  u_ch;
 
   for(char ch=-128;ch<=127;ch++)
     {
      u_ch=ch;
      Print("ch = ",ch," u_ch = ",u_ch);
      if(ch==127) break;
     }
  }

Sonuç:

   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
   ... 

Örnekler:

//--- Negatif değerler, işaretsiz (unsigned) tiplerde saklanamazlar
uchar  u_ch=-120;
ushort u_sh=-5000;
uint   u_in=-401280;

Onaltılık: 0x veya 0X ile başlayan ve a-f/A-F harfleriyle (10-15 arası değerlerin yazımı için) ve 0-9 arası rakamlarla temsil edilirler.

Örnekler:

0x0A0x120X120x2f0xA30Xa30X7C7

Tamsayı değişkenleri B ön eki kullanılarak ikili tabanda yazılabilir. Örneğin, bir alım-satım seansının çalışma saatlerini int tipli bir değişkene kodlayabilir ve ilgili bilgiyi istenen algoritmaya göre kullanabilirsiniz:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- çalışma saatleri için 1, diğer saatler içinse 0 değerini ayarla
   int AsianSession   =B'111111111'// Asya seansı 0:00 - 9:00
   int EuropeanSession=B'111111111000000000'// Avrupa seansı 9:00 - 18:00
   int AmericanSession =B'111111110000000000000011'// Amerika seansı 16:00 - 02:00
//--- seansların sayısal değerlerini türet
   PrintFormat("Asya seans saatleri değeri =%d",AsianSession);
   PrintFormat("Avrupa seans saatleri değeri =%d",EuropeanSession);
   PrintFormat("Amerika seans saatleri değeri =%d",AmericanSession);
//--- şimdi, seansların çalışma saatlerini dizgi ifadeleri ile gösterelim
   Print("Asya seansı ",GetHoursForSession(AsianSession));
   Print("Avrupa seansı ",GetHoursForSession(EuropeanSession));
   Print("Amerika seansı ",GetHoursForSession(AmericanSession));   
//---
  }
//+------------------------------------------------------------------+
//| seansların çalışma saatlerine bir dizgi şeklinde dönüş yap       |
//+------------------------------------------------------------------+
string GetHoursForSession(int session)
  {
//--- kontrol etmek içn, AND bit işlemlerini ve 1 bitlik sağ kaydırmayı <<=1 kullan
//--- kontrole en düşük bitten başla
   int bit=1;
   string out="çalışma saatleri: ";
//--- sıfırdan yirmiüçe kadar artırarak 24 bitin tamamını kontrol et  
   for(int i=0;i<24;i++)
     {
      //--- bit durumunu sayıyla al
      bool workinghour=(session&bit)==bit;
      //--- saati ifade eden sayıyı mesaja ekle
      if(workinghour )out=out+StringFormat("%d ",i); 
      //--- bir sonrakinin değerini kontrol etmek için bir bit sola kaydır
      bit<<=1;
     }
//--- sonuç dizgisi
   return out;
  }

Ayrıca Bakınız

Tip Dönüşümü