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:
0x0A, 0x12, 0X12, 0x2f, 0xA3, 0Xa3, 0X7C7
|
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ü