下载MetaTrader 5
MQL5参考语言基础数据类型整型字符型,短整型,整型和长整型 

字符型,短整型,整型和长整型

char

字符型在内存里存储1字节(8位元组),允许二进制记录法2^8=256表达值。字符型包括正值和负值,范围在-128-127之间。

uchar

无字符型字符型一样,也占据1字节内存,但与之不同的是,它只有正值。最小值是0,最大值是255,无字符型的第一个字母u是unsigned的缩写。

short

短型数据2字节(16位元组),所以它可以表达等于2的值和16: 2^16 = 65 536,因此短型还是一个符号,包括正值和负值,范围在-32768到32767之间。

ushort

无符短型ushort,也占用2字节,最小值是0,最大值是65535。.

int

整型占用4字节内存(32元组),最小值是-2 147 483 648,最大值是2 147 483 647。

uint

无符号整型就是uint。它占用4字节内存,区间在0到4 294 967 295之间。

long

长型占用8字节(64元组),最小值是-9 223 372 036 854 775 808,最大值是9 223 372 036 854 775 807。

ulong

无符长型也占用8字节,能存储从0到18 446 744 073 709 551 615之间的值。

示例:

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

无符长型不代表短型的负值,建立负值会导致意外的结果,该脚本会无限循环:

//--- 无限循环
void OnStart()
  {
   uchar  u_ch;
 
   for(char ch=-128;ch<128;ch++)
     {
      u_ch=ch;
      Print("ch = ",ch," u_ch = ",u_ch);
     }
  }

正确的转化是:

//--- 正确的变量
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;
     }
  }

结果:

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

示例:

//--- 负值不能存储在无符类型中
uchar  u_ch=-120;
ushort u_sh=-5000;
uint   u_in=-401280;

十六进制:数字0-9,字母a-f,或A-F表示值10-15,从0x或0X开始。

示例:

0x0A0x120X120x2f0xA30Xa30X7C7

对于整型变量,值可以使用B前缀以二进制格式设置。例如,您可以编码交易时间的工作小时为int类型变量并根据所需的算法使用他们的信息:

//+------------------------------------------------------------------+
//| 脚本程序开始函数                                                |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- 设置 1 为工作小时和 0 为非工作小时
   int AsianSession   =B'111111111'// 亚洲时间从 0:00 到 9:00
   int EuropeanSession=B'111111111000000000'// 欧洲时间 9:00 - 18:00
   int AmericanSession =B'111111110000000000000011'// 美洲时间 16:00 - 02:00
//--- 派生时间数值
   PrintFormat("Asian session hours as value =%d",AsianSession);
   PrintFormat("European session hours as value is %d",EuropeanSession);
   PrintFormat("American session hours as value is %d",AmericanSession);
//--- 现在让我们展示时间工作小时的字符串表示
   Print("Asian session ",GetHoursForSession(AsianSession));
   Print("European session ",GetHoursForSession(EuropeanSession));
   Print("American session ",GetHoursForSession(AmericanSession));   
//---
  }
//+------------------------------------------------------------------+
//| 返回时间工作小时为字符串                                       |
//+------------------------------------------------------------------+
string GetHoursForSession(int session)
  {
//--- 若要检查,使用AND比特操作并左移1比特<<=1
//--- 从最小比特开始检查
   int bit=1;
   string out="working hours: ";
//--- 从零开始检查全部24比特并最高到23
   for(int i=0;i<24;i++)
     {
      //--- 总共接收的比特数
      bool workinghour=(session&bit)==bit;
      //--- 添加小时数到嘻嘻
      if(workinghour )out=out+StringFormat("%d ",i); 
      //--- 左移1比特检查下一个的值
      bit<<=1;
     }
//--- 结果字符串
   return out;
  }

另见:

类型转换


更新: 2015.12.03