MQL5中的OOP问题 - 页 91 1...84858687888990919293949596 新评论 Igor Makanu 2020.09.23 18:01 #901 Dmitry Fedoseev:为什么会突然不工作了呢?三个数,都不超过10。 初中二年级的算术题。 3个枚举加2个int,你需要4个字节=int 我需要在+1000 -...+1000 ,点子,这只是2^10 英特是值得考虑的,1个点的步骤并不重要,2.5-...9个点也是可能的,也就是说,离散性并不十分关键。 Dmitry Fedoseev 2020.09.23 18:07 #902 Igor Makanu:3个枚举加2个int,需要4个字节。我需要在+1000 -...+1000 ,点子,这只是2^10英镑是值得考虑的,1个点的增量并不重要,你可以有2.5-...9个点,也就是说,离散性并不是那么关键。 空间绰绰有余。int_max=2147483647。 我们可以用几十块钱来代替直截了当的直白,把它变成8*8*4的稀罕物。只有你需要思考)))。但没有必要,反正一切都适合。 为了检查--为什么不开始循环到INT_MAX--硬件会检查它,而不是自己去翻阅有结果的文件。 Igor Makanu 2020.09.23 18:25 #903 Dmitry Fedoseev:足够多的空间。int_max=2147483647。你也可以不笨不直--几十块钱就能占到,而且经济上也能在紧要关头做到--8*8*4。只有你需要思考)))。但没有必要,反正一切都适合。为了检查--为什么不使循环达到INT_MAX--它将被硬件检查,我们不需要自己去翻看结果文件。 我不介意...我需要代码来评估,方法论比如何转换更重要。 Alexandr Andreev 2020.09.23 18:33 #904 Igor Makanu:我不介意...我需要代码来评估,测试方法比如何转换更重要。 比特式引物,不是吗?这就像用位值将数字转换为字符串一样。一个用于整数,一个用于点和检查。这只是为了调试的目的。 Igor Makanu 2020.09.23 18:42 #905 Alexandr Andreev:比特式反写,不是吗?类似于用bitwise值串起一个数字。一个用于整数,一个用于点和检查。这只是为了调试的目的。 是的,这很清楚,但你如何将验证工作自动化? 问题不在于我的例子,而在于我还需要打包3个其他数据的int,我不想花太多时间去检查每一个打包。 ZS:这个想法很好,但不是位数,而是十六进制--从printf() 可以得到,或者说从stringformat()可以得到。 Alexandr Andreev 2020.09.23 18:51 #906 Igor Makanu:是的,这一切都很清楚,但如何使检查自动化?问题不在于我的例子,而在于我还需要打包3个int的其他数据,我不想花大量的时间去检查每一个打包。HH:好主意,但不是位数,而是十六进制--我们可以从printf()或stringformat()中得到它们。 ))搞不清楚需要什么 v = (V)(data & 0x3); d = (D)((data >> 2) & 0x7); t = (T)((data >> 5) & 0x7); uint tmp = ((data >> 8) & 0xFFF); param2 = (tmp & 0x800) == 0x800 ? -(int)(tmp & 0x7FF) : (int)(tmp & 0x7FF); tmp = data >> 20; param1 = (tmp & 0x800) == 0x800 ? -(int)(tmp & 0x7FF) : (int)(tmp & 0x7FF); 我们是要自动化的偏移还是什么? 这个检查是什么? 而且我们总是可以直接检查源值和转换值。 Dmitry Fedoseev 2020.09.23 18:56 #907 Igor Makanu:我不介意...你需要代码来评估,而验证的方法比如何转换更重要 如果转换方法是清晰易懂的,你就不需要过多检查。 Vladimir Simakov 2020.09.23 19:01 #908 ... static int sign; static int _sign; static int mean; public: ... int Get() const; static void Print(int val); private: int GetInt12(int val) const {return ((val&sign)>>20)|(val&mean);} static int GetInt(int val) {return (val&_sign)<<20|(val&mean);} }; ... //------------------------------------------------------------------------ int CSetting::Get() const{ return t<<29|d<<26|v<<24|GetInt12(param1)<<12|GetInt12(param2); } //------------------------------------------------------------------------ void CSetting::Print(int val){ PrintFormat("%s, %s, %s, %i, %i",EnumToString(T(val>>29)),EnumToString(D(val>>26)),EnumToString(V(val>>24)),GetInt(val>>12),GetInt(val)); } int CSetting::sign=1<<31; int CSetting::_sign=1<<11; int CSetting::mean=0xFFFFFFFF>>21; void OnStart(void) { CSetting test(Input_p1,Input_p2,Input_T,Input_D,Input_V); int res=test.Get(); Print ("int=",res); CSetting::Print(res); } Alexandr Andreev 2020.09.23 19:06 #909 Vladimir Simakov: 很明显,对我来说会有更多的变量,最好是使用字节复制结构(可能这个过程不需要强烈的速度优化,但方便性会很高)。 Dmitry Fedoseev 2020.09.23 19:11 #910 void OnStart() { int a=9; int b=8; int c=7; int d=12345; int v=pack(a,b,c,d); int a2,b2,c2,d2; unpack(v,a2,b2,c2,d2); Alert(a2," ",b2," ",c2," ",d2); } void unpack(int val,int & a,int & b,int & c,int & d){ d=val/1000; val%=1000; c=val/100; val%=100; b=val/10; a=val%10; } int pack(int a,int b,int c,int d){ return(a+b*10+c*100+d*1000); } 廉价和便宜 1...84858687888990919293949596 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
为什么会突然不工作了呢?三个数,都不超过10。 初中二年级的算术题。
3个枚举加2个int,你需要4个字节=int
我需要在+1000 -...+1000 ,点子,这只是2^10
英特是值得考虑的,1个点的步骤并不重要,2.5-...9个点也是可能的,也就是说,离散性并不十分关键。
3个枚举加2个int,需要4个字节。
我需要在+1000 -...+1000 ,点子,这只是2^10
英镑是值得考虑的,1个点的增量并不重要,你可以有2.5-...9个点,也就是说,离散性并不是那么关键。
空间绰绰有余。int_max=2147483647。
我们可以用几十块钱来代替直截了当的直白,把它变成8*8*4的稀罕物。只有你需要思考)))。但没有必要,反正一切都适合。
为了检查--为什么不开始循环到INT_MAX--硬件会检查它,而不是自己去翻阅有结果的文件。
足够多的空间。int_max=2147483647。
你也可以不笨不直--几十块钱就能占到,而且经济上也能在紧要关头做到--8*8*4。只有你需要思考)))。但没有必要,反正一切都适合。
为了检查--为什么不使循环达到INT_MAX--它将被硬件检查,我们不需要自己去翻看结果文件。
我不介意...我需要代码来评估,方法论比如何转换更重要。
我不介意...我需要代码来评估,测试方法比如何转换更重要。
比特式引物,不是吗?这就像用位值将数字转换为字符串一样。一个用于整数,一个用于点和检查。这只是为了调试的目的。
比特式反写,不是吗?类似于用bitwise值串起一个数字。一个用于整数,一个用于点和检查。这只是为了调试的目的。
是的,这很清楚,但你如何将验证工作自动化?
问题不在于我的例子,而在于我还需要打包3个其他数据的int,我不想花太多时间去检查每一个打包。
ZS:这个想法很好,但不是位数,而是十六进制--从printf() 可以得到,或者说从stringformat()可以得到。
是的,这一切都很清楚,但如何使检查自动化?
问题不在于我的例子,而在于我还需要打包3个int的其他数据,我不想花大量的时间去检查每一个打包。
HH:好主意,但不是位数,而是十六进制--我们可以从printf()或stringformat()中得到它们。
))搞不清楚需要什么
我们是要自动化的偏移还是什么?
这个检查是什么?
而且我们总是可以直接检查源值和转换值。
我不介意...你需要代码来评估,而验证的方法比如何转换更重要
如果转换方法是清晰易懂的,你就不需要过多检查。
很明显,对我来说会有更多的变量,最好是使用字节复制结构(可能这个过程不需要强烈的速度优化,但方便性会很高)。
廉价和便宜