错误、漏洞、问题 - 页 3108

 
Nikolai Semko #:

明白了。
哦,这个日蚀走廊......

由于没有连接,我的演示中已经有时间了,已经有40个小时了。

 
Nikolai Semko #:

不能跳过产品的新版本,虽然以前很好。


看来我不是那个有问题的人。
build 3110

昨天,我们在连接MetaQuotes-Demo服务器时遇到问题,该服务器用于验证Marketplace产品,以及其他事项。

我们昨天修复了这个错误,并重新检查了所有由于技术原因而未能通过验证的产品。

我们对造成的不便表示歉意。

如果我们不小心遗漏了你的产品而没有重新检查,请你自己去做。现在验证工作应该正常进行。

 

下面是一个示例代码。

//+------------------------------------------------------------------+
#property strict
//+------------------------------------------------------------------+
void OnStart()
  {
  uint iCurrent =722;
  int  iinterval=1000;         
  int  iNext=(int)(iCurrent-iinterval/2); // 722-500=222
  Print ("Current :",iCurrent);
  Print ("iNext   :",iNext);
  long  temp=(long)(iNext-iCurrent); //предупреждений нет ожидаем Лонг -500
  Print ( " temp (long):",temp);//int - uint ->uint Result: uint -- oшибка!

  Print ( " delta(&int)"+string((int)(iNext-iCurrent)));    // неожиданный успех  
  Print ( " delta(&long)"+string((long)(iNext-iCurrent)));  // опять штанга
  //-----------------------------------
 }

结果。

2021.11.23 13:07:35.931 testUint (Volatility 75 Index,M15)      Current :722
2021.11.23 13:07:35.932 testUint (Volatility 75 Index,M15)      iNext   :222
2021.11.23 13:07:35.932 testUint (Volatility 75 Index,M15)       temp (long):4294966796
2021.11.23 13:07:35.932 testUint (Volatility 75 Index,M15)       delta(&int)-500
2021.11.23 13:07:35.932 testUint (Volatility 75 Index,M15)       delta(&long)4294966796

谁能解释一下--为什么

long  temp=(long)(iNext-iCurrent);

给予

4294966796

而不是-500。

我不知道我的脑子里在想什么......(

 
Mikhail Dovbakh #:

下面是一个示例代码。

结果。

谁能解释一下--为什么

给予

而不是-500。

我不知道我的脑子里在想什么......(

long temp=(long)iNext-iCurrent;

https://www.mql5.com/ru/docs/basis/types/casting

你先把iNext简化为无符号整数。然后,无符号整数的结果被转换为长。

在我的例子中,iNext被立即转换为长类型,所以iCurrent也被转换为长类型,但却是隐式的。结果立即被转换为长

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Приведение типов - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Slava #:

问题是为什么这种类型的命令不能得到正确的结果。我只能假设它取决于表达式中的类型层次顺序。如果这些类型在运行时在表达式中是按层次顺序排列的,那么答案是正确的,如果不是,那么违反层次结构的非显式类型转换可能会改变变量的值。

long temp=(long)((int)iNext-(uint)iCurrent); 

一般来说,非明确的类型转换会违反层次结构。

 
MetaQuotes #:

昨天,我们在连接MetaQuotes-Demo服务器时遇到问题,除其他外,该服务器用于验证Marketplace产品。

我们昨天修复了这个错误,并重新检查了所有因技术原因未能通过验证的产品。

我们对造成的任何不便表示歉意。

如果我们不小心漏掉了你的产品,而它又没有得到重新验证,请你自己去做。现在检查应该正常工作。

谢谢你!
现在一切都在运作。
 
Slava #:

https://www.mql5.com/ru/docs/basis/types/casting

你首先把iNext简化为一个无符号整数。然后将无符号整数的结果转换为长数。

在我的例子中,iNext被立即转换为长类型,所以iCurrent也被转换为长类型,只是隐含的。其结果立即被投到长

你可以看到为什么

 Print ( " delta(&int)"+string((int)(iNext-iCurrent)));    // неожиданный успех 

и

int itemp=(int)(iNext-iCurrent); 


能否得到正确的结果?

根据你的描述,iNext首先被铸成一个无符号整数然后,无符号整数的结果被转换为有符号的整数。

对吗?

 

趋势线未被磁化到低位红烛(欧元兑美元,M5;精确的时间尺度;磁化:15)。


 
Mikhail Dovbakh #:

然后解释原因。

и

int itemp=(int)(iNext-iCurrent); 


能否得到正确的结果?


很容易

一个长度为32位 的无符号整数4294966796转换为相同尺寸的有符号整数时,得到的是-500

 
Valeriy Yastremskiy #:

问题是为什么这种类型的命令不能得到正确的结果。我只能假设它取决于表达式中的类型层次顺序。如果这些类型在运行时在表达式中是按层次顺序排列的,那么答案是正确的,如果不是,那么违反层次结构的非显式类型转换可能会改变变量的值。

Zy 一般来说,是一种非显式的类型转换,也是对层次结构的违反。

我已经给了你链接https://www.mql5.com/ru/docs/basis/types/casting

它非常详细地说明了这一切。从头到尾阅读,不遗漏任何内容

Документация по MQL5: Основы языка / Типы данных / Приведение типов
Документация по MQL5: Основы языка / Типы данных / Приведение типов
  • www.mql5.com
Приведение типов - Типы данных - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5