MQL5中的OOP问题 - 页 93 1...8687888990919293949596 新评论 Igor Makanu 2020.09.24 07:04 #921 Igor Makanu:另一个问题...有什么方法可以通过union获得12位int吗?不要紧,))))SZY:最好是9-15位的int,符号分配不是问题,也就是说可以用无符号int(在MQL的最后一个版本中学习了无符号int,可以代替uint来使用)。 我不明白......帮帮我吧!))) 我想明白了,我可以通过这种方式来分配一些需要的比特。 //+------------------------------------------------------------------+ uint ConvertUintToXBits(const uint value, const int pos, const int cnt_bits) { uint mask = (0xFFFFFFFF >> (sizeof(uint) - cnt_bits)) << pos; // получили битовую маску uint result = value & mask; // выделили биты числа return(result >> pos); // сдвинули чтобы привести к 32-битам } //+------------------------------------------------------------------+ 现在最重要的位会 在哪里,以确定数字的符号...不知道,也就是说,理想情况下,它应该是一个函数 int ConvertUintToXBits(const uint value, const int pos, const int cnt_bits) 理想情况下,它应该是一个模板,可以使用这种结构。 struct Int12 { private: const int bits; public: Int12(const uint IntValue): bits(12) {ConvertUintToXBits.......} int value; }; Vladimir Simakov 2020.09.24 07:35 #922 Igor Makanu:因此,我再次不明白......帮助!帮助!帮助!。)))我想明白了,我可以分配一些我需要的位子。其中最高位 将是现在,以确定该数字的符号...不知道,也就是说,理想情况下,它应该是一个函数理想情况下,它应该是一个模板,可以使用这种结构。 见。掩码是数字的有效部分,也就是说,对于int来说,你必须再移位一点,因为你的高位意味着符号。<<pos is a mess.在你的例子中,你将通过这个掩码获取int的高位,而你需要低位)))。 对于有符号的整数,你必须分别取有效部分,分别取高位(符号),然后将高位移到需要的位置,并使用位法OR将它们合并。int-> 4位的例子 int mean4=0xFFFFFFFF>>29 int sign16=1<<31 int sign4=1<3 现在int->int4注意你的手。 1.我们有int val 2. int sign=(val&sign16)>>28。 在这里,我们取了数字的符号,并将其移到右边的位置(int4中最重要的位)。 3. mean3val=val&mean4 在这里,我们通过掩码得到了三个最不重要的位(有意义的部分),其余的被剪掉。 4. int out=sign|mean3val 而在这里,我们把标志和重要部分结合起来。现在我们有4个低阶位,其中第4位是符号,第1至3位是有效部分,4位以上的所有位都是0值。值的范围是-8...7,是的,如果输入8,就没有7,就会是0,因为一切都会被切断。 Questions on OOP in RitaForex | Technical Analysis i am new in Dmitry Fedoseev 2020.09.24 07:56 #923 用正确的位数移位并使用1作为掩码会更容易。至少它是比较明显的。 符号定义:(a>>31)&1 - 如果是1,则为减号,如果是0,则为加号。 Igor Makanu 2020.09.24 08:42 #924 我可以用一个 "正面 "的解决方案从int中做出重要的位子,但我不能做出一个普遍的解决方案......。我不能!()()。 我极有可能没有解释我想怎么走,走到哪里去。 这里有4个字节的int/uint,还有我的数据集,我想在优化器中解压 。 让我们假设我成功地以这种方式包装它。 0-8 9-16 17-24 25-32 int_11 int_9 int_12 我需要什么类型的int_XXX,我还没有估计到。 但我想以这样的代码形式拥有实用性 input int param1 = 0xFFFFFFF; int MyParam_1 = ConVertUintToIntXXX((uint)param1, 0, 11); int MyParam_2 = ConVertUintToIntXXX((uint)param1, 12, 9); int MyParam_3 = ConVertUintToIntXXX((uint)param1, 21,12); Vladimir Simakov 2020.09.24 08:58 #925 还没有人发现我的错误吗?)))) 提示。所有的面具都应该是uint))) Dmitry Fedoseev 2020.09.24 09:41 #926 Igor Makanu:我可以用一个 "正面 "的解决方案从int中做出重要的位子,但我不能做出一个普遍的解决方案......。我不能!()()。我极有可能没有解释我想怎么走,走到哪里去。这里有4个字节的int/uint,还有我的数据集,我想在优化器中解压 。让我们假设我成功地以这种方式包装它。 0-8 9-16 17-24 25-32 int_11 int_9 int_12 我需要什么类型的int_XXX,我还没有估计到。但我想有一个可用性,其形式为以下代码 int add(int o,int l,int v,int r){ int m=(int)MathPow(2,l)-1; r=~r; r=r|(m<<o); r=~r; r=r|(v<<o); return(r); } int extract(int o,int l,int r){ int m=(int)MathPow(2,l)-1; return((r>>o)&m); } o - 缩进(比特),l - 长度(比特数),要添加的值,r - 添加的位置 但我还没有测试过。 Alexandr Andreev 2020.09.24 10:53 #927 Dmitry Fedoseev:因为你没有覆盖一个虚拟函数,你使用的是重载。这里显然有问题 A100 2020.09.24 11:05 #928 Alexandr Andreev:这里显然有问题。 使该方法成为一个模板,并访问它 class A { template<typename T> void f( T ) {} }; void OnStart() { A а; а.f(0); //нормально } Alexandr Andreev 2020.09.24 17:24 #929 A100:使该方法成为一个模板,并访问它 那是一个laifhack!!!。 ps:+1写东西的方法,当他们调整这个loafhack时,就会随着更新而停止工作。 A100 2020.09.24 18:01 #930 Alexandr Andreev:这是个漏洞!!!。 ps:+1写东西的方法,当他们调整这个loafhack时,就会随着更新而停止工作。class A { public: void f( int ) {} }; class B : public A { public: template<typename T> void f( T ) { ffffffffffff(1); пишу что хочу %<>!!!<>% } //нормально }; 在这样的差距下,纳秒之争 看起来很奇怪 1...8687888990919293949596 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
另一个问题...有什么方法可以通过union获得12位int吗?不要紧,))))
SZY:最好是9-15位的int,符号分配不是问题,也就是说可以用无符号int(在MQL的最后一个版本中学习了无符号int,可以代替uint来使用)。
我不明白......帮帮我吧!)))
我想明白了,我可以通过这种方式来分配一些需要的比特。
现在最重要的位会 在哪里,以确定数字的符号...不知道,也就是说,理想情况下,它应该是一个函数
理想情况下,它应该是一个模板,可以使用这种结构。
因此,我再次不明白......帮助!帮助!帮助!。)))
我想明白了,我可以分配一些我需要的位子。
其中最高位 将是现在,以确定该数字的符号...不知道,也就是说,理想情况下,它应该是一个函数
理想情况下,它应该是一个模板,可以使用这种结构。
见。掩码是数字的有效部分,也就是说,对于int来说,你必须再移位一点,因为你的高位意味着符号。<<pos is a mess.在你的例子中,你将通过这个掩码获取int的高位,而你需要低位)))。
对于有符号的整数,你必须分别取有效部分,分别取高位(符号),然后将高位移到需要的位置,并使用位法OR将它们合并。int-> 4位的例子
int mean4=0xFFFFFFFF>>29
int sign16=1<<31
int sign4=1<3
现在int->int4注意你的手。
1.我们有int val
2. int sign=(val&sign16)>>28。
在这里,我们取了数字的符号,并将其移到右边的位置(int4中最重要的位)。
3. mean3val=val&mean4
在这里,我们通过掩码得到了三个最不重要的位(有意义的部分),其余的被剪掉。
4. int out=sign|mean3val
而在这里,我们把标志和重要部分结合起来。现在我们有4个低阶位,其中第4位是符号,第1至3位是有效部分,4位以上的所有位都是0值。值的范围是-8...7,是的,如果输入8,就没有7,就会是0,因为一切都会被切断。
用正确的位数移位并使用1作为掩码会更容易。至少它是比较明显的。
符号定义:(a>>31)&1 - 如果是1,则为减号,如果是0,则为加号。
我可以用一个 "正面 "的解决方案从int中做出重要的位子,但我不能做出一个普遍的解决方案......。我不能!()()。
我极有可能没有解释我想怎么走,走到哪里去。
这里有4个字节的int/uint,还有我的数据集,我想在优化器中解压 。
让我们假设我成功地以这种方式包装它。
我需要什么类型的int_XXX,我还没有估计到。
但我想以这样的代码形式拥有实用性
还没有人发现我的错误吗?))))
提示。所有的面具都应该是uint)))
我可以用一个 "正面 "的解决方案从int中做出重要的位子,但我不能做出一个普遍的解决方案......。我不能!()()。
我极有可能没有解释我想怎么走,走到哪里去。
这里有4个字节的int/uint,还有我的数据集,我想在优化器中解压 。
让我们假设我成功地以这种方式包装它。
我需要什么类型的int_XXX,我还没有估计到。
但我想有一个可用性,其形式为以下代码
o - 缩进(比特),l - 长度(比特数),要添加的值,r - 添加的位置
但我还没有测试过。
因为你没有覆盖一个虚拟函数,你使用的是重载。
这里显然有问题
这里显然有问题。
使该方法成为一个模板,并访问它
使该方法成为一个模板,并访问它
那是一个laifhack!!!。
ps:+1写东西的方法,当他们调整这个loafhack时,就会随着更新而停止工作。
这是个漏洞!!!。
ps:+1写东西的方法,当他们调整这个loafhack时,就会随着更新而停止工作。