错误、漏洞、问题 - 页 1128

 

在 "正常 "比较中,它被赋予了无符号类型

void OnStart()
{
  ulong i=0;
  while(true)
  {
    if(i<ULONG_MAX) {i++;}  //тут в условии так и остаётся тип ulong, преобразования к long не происходит
    else {break;}
  }
}
 
Fleder:

那你怎么解释呢。

long t=0;
  bool comp=(ULONG_MAX-1>t);
  Print("comp = ",comp);   //comp = true
比特比较--不存在矛盾。然后--只有当long<0时,比较ulong和long才是不正确的。
 
void OnStart()
{
  long n=0;
  uint g=UINT_MAX;
//for(int i=0;i<UINT_MAX;i++) {n++;}  //здесь получаем бесконечный цикл и предупреждение expression is always true
  for(int i=0;i<g;i++) {n++;}         //здесь получаем предупреждение sign mismatch и цикл в 4294967295 итераций
  Print("n = ",n);                    //n = 4294967295            
}

在第一个循环的测试表达式中,int类型的变量与uint类型的整数常数进行比较。

没有隐含的类型转换,会进行位数比较。这种表达方式总是真实的。

在第二个循环被检查的表达式中,一个int类型的变量与一个uint类型的变量进行比较。

将变量i隐式转换为uint类型。而在i变量溢出后:uint(-1)=4294967295

的表达式将是假的。


 

一个时代(UNIX?) 的结束被推迟了8小时

全部类型

类型

字节大小

最低值

最大值

C++中的模拟

日期时间

8

0 (1970.01.01 0:00:00)

32 535 244 799(3000.12.31 23:59:59)

__时间64_t

void OnStart()
{
  Print((datetime)32535244799);   //3001.01.01 07:59:59
}
 

开发人员。

给他一个MQL语法的正式描述,让他去寻找鼻屎:-)))

 

简单的事情:

double min,max;

i=Bars-1-period1;
while(max-min=0)
{
min=Low[i];
max=High[i];
i++;
}

关于TF。D1和M4的调试器拒绝了min=Low[i]这一行;终端 "挂起"。在其他TF上,这个问题并不存在。用min=iLow();代替没有任何作用。 请告知,"漏洞 "在哪里:在历史中,在新的MT4编辑器中还是在我的头脑中?

 
admoon:

简单的东西。

   double min,max;

   i=Bars-1-period1;
   while(max-min==0)
     {
      min=Low[i];
      max=High[i];
      i++;
     }

关于TF。D1和M4调试器拒绝min=Low[i];这一行,终端 "挂起"。在其他TF上,这个问题并不存在。替换min=iLow();并没有给我带来任何好处。 请告诉我 "漏洞 "在哪里:在历史中,在新的MT4编辑器中还是在我的头脑中?

在创建论坛帖子时,请使用 "SRC "按钮 来插入代码。


这将使你的信息更容易阅读。

 
Fleder:

一个时代(UNIX?) 的结束被推迟了8小时。

在帮助中一定有一个错误
Print( ulong(::StringToTime( "3000.12.31 23:59:59" ))); //32'535'215'999

或者我们不知道什么,我想有人甚至在这里手算过https://www.mql5.com/en/forum/16036

 
A100:
显然,在帮助中max=32'535'215'999有一个错误。

只是对数据时间类型 的限制没有正确定义。

void OnStart()
{
  Print((datetime)32535244799);   //3001.01.01 07:59:59
  Print((datetime)32535244800);   //wrong datetime
}
 
Fleder:

数据时间类型 的限制根本没有正确定义。

32'535'244'799 != 32'535'215'999 - 哪个是正确的?