来自一个 "傻瓜 "的问题 - 页 14 1...789101112131415161718192021...277 新评论 Vladimir Gomonov 2011.06.24 00:54 #131 这是另一件需要考虑的事情。做到这一点!//报告结果。;)struct s_char8 { char c[8]; }; struct s_long { long l; }; void OnStart() { Print("//------ "); s_long L; L.l = 2387159478511726799; s_char8 Ch = L; string S = CharArrayToString(Ch.c, 0); Print(S); } Victor Kirillin 2011.06.24 00:55 #132 MetaDriver:说实话,我很困惑,伙计们。 你们只是在公平竞争的环境中乱来。完全是平的。我只是想道歉,并在这次 "严肃 "的谈话中插话。但是当我在外面买烟的时候,我被打到了。而且,我们又不是 "傻瓜",不是吗?而这个 "嘘--嘘--"是无中生有的。在CExpert类中,我把它改成ulong。 --- 2011.06.24 02:18 #133 Renat:你错了。 是的,我忘记了类型转换的问题。 Yedelkin 2011.06.24 07:13 #134 uncleVic: 而且不是 "傻瓜",是吗? 我在很多方面都是个傻子。所以我不明白打算返回long的函数如何会返回ULONG_MAX-1。肤浅地处理整数类型的陷阱几乎写在了《手册》本身。sergeev 正确把握了问题 的原因:秩序控制。如果我指定request.magic为ulong,那么我希望HistoryDealGetInteger()、PositionGetInteger() 和OrderGetInteger() 函数也将返回ulong类型。没有任何显性-隐性的类型转换。 然而,如果他的 例子解释了long<->ulong类型的转换不会造成数值的损失(例如不像double->int),那么进一步的思考过程就变得清晰了。 UncleVic: 而这样的 "嘘声 "是在一个空旷的地方产生的。 事实上,选择 "傻瓜问题 "主题是为了得到解释,而不是训诫。 Victor Kirillin 2011.06.24 07:53 #135 Yedelkin: 我在很多事情上都是个哑巴。所以我不明白,本应返回long的函数怎么会返回ULONG_MAX-1。肤浅地处理整数类型的陷阱,几乎在《手册》本身就有记载。sergeev 正确把握了问题 的原因:秩序控制。如果我指定request.magic为ulong,那么我希望HistoryDealGetInteger()、PositionGetInteger() 和OrderGetInteger() 函数也将返回ulong类型。没有任何显性-隐性的类型转换。 然而,如果他的 例子解释了long<->ulong类型的转换不会造成值的损失(与例如double ->int不同),那么进一步的思考过程就变得清晰了。 实际上,选择 "Dummie's Questions "主题的目的是为了阐明问题,而不是训斥。 被冒犯了?对不起,我忍不住了。 Yedelkin 2011.06.24 07:58 #136 uncleVic: 你被冒犯了吗?对不起,我忍不住了。 不,我不是,我也有过网络争斗的经历。我只是一直试图将讨论引向一个建设性的方向,可以说是这样。 Slava 2011.06.24 10:50 #137 sergeev: 事实上,它不是64位,而是只有63位(即不完整的8个字节)。如果使用整个长区,则为8个字节。 但不幸的是... 一方面,神奇的ulong 被传入MqlTradeRequest 结构。这意味着只能设置正值。 另一方面, PositionGetInteger/OrderGetInteger函数 返回 长 类型 。这意味着ulong 范围的一半被切断了。 事实上,我们所拥有的是63位,而不是上述的64位。实际上,这并不是什么坏事,而是对 秩序检查的原则造成了极大的不便 。 如果使用与MT4相同的系统会更方便--允许魔术师带牌子。由于许多交易系统是基于一个简单的原则,使用的正是魔术师的符号。因为把一个系统分成两个,用通常的MathAbs( OrderMagicNumber( ) ) 函数过滤出你的订单要容易得多。 所有64个。作为一个事实上的问题。不要拘泥于有符号或无符号的类型。这是为了让编译器确保算术运算的正确性(根据有符号的类型,有一个逻辑或算术的右移)。 在相同大小的数据的传输(分配)和无符号-无符号铸造过程中,没有信息丢失。试着来回跳动ULONG_MAX。试试长龙的任务,然后再回来。尝试结构复制。 最好的事情是为自己确定。那么这个问题就会一劳永逸地得到解决。 Yedelkin 2011.06.24 11:09 #138 MetaDriver: 这是另一件需要考虑的事情。做到这一点!//报告结果。;) 完成了!用L.l = 4548887299649496524替换代码中的第14行。 从MqlTradeRequest 结构的描述中可以看出,magic是ulong类型的,即它可以被分配大于LONG_MAX 常数的值。 然而,在中国的功能...GetInteger() 函数被设计为与长类型一起工作,所以魔法值将被这些函数隐含地转换为长类型。但是,由于long和ulong类型的变量之间存在一对一的对应关系,当将魔法值与......的函数返回的结果进行比较时。GetInteger() 函数 , 我们可以安全地使用显式类型转换(例如:magic == (ulong)OrderGetInteger(ORDER_MAGIC) )。 谢谢你反复展示的例子。 [删除] 2011.06.24 11:20 #139 stringo:在数据传输(分配)和相同大小的数据的符号-无符号铸造过程中,任何地方都不会丢失信息。试着来回跳动ULONG_MAX。试试长龙的任务,然后再回来。尝试结构复制。说服你自己,不要传播神话。我已经试过了,在强制类型时,它返回了必要的结果(好吧,也许还得额外做一次 "与钻石共舞")。但这并不那么重要)。UncleVic:我将把CExpert 类改成ulong。我认为这是个好主意,那些在魔法中使用负值的人将不得不强行规定他们必须返回/设置什么。如果文档中不只是表示long或ulong,而是表示这两种类型,那就非常好了(例如,这样 "long/ulong")。 Yedelkin 2011.06.24 11:52 #140 stringo: 在数据传输(赋值)过程中,或在相同大小的数据 的无符号铸造过程中,没有任何信息丢失。 还有一个问题:在转移双倍 -> 长倍时,是否有任何优雅的方法来保存信息? 1...789101112131415161718192021...277 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这是另一件需要考虑的事情。做到这一点!//报告结果。;)
说实话,我很困惑,伙计们。 你们只是在公平竞争的环境中乱来。完全是平的。
我只是想道歉,并在这次 "严肃 "的谈话中插话。但是当我在外面买烟的时候,我被打到了。
而且,我们又不是 "傻瓜",不是吗?而这个 "嘘--嘘--"是无中生有的。
在CExpert类中,我把它改成ulong。
你错了。
是的,我忘记了类型转换的问题。
而且不是 "傻瓜",是吗?
我在很多方面都是个傻子。所以我不明白打算返回long的函数如何会返回ULONG_MAX-1。肤浅地处理整数类型的陷阱几乎写在了《手册》本身。sergeev 正确把握了问题 的原因:秩序控制。如果我指定request.magic为ulong,那么我希望HistoryDealGetInteger()、PositionGetInteger() 和OrderGetInteger() 函数也将返回ulong类型。没有任何显性-隐性的类型转换。
然而,如果他的 例子解释了long<->ulong类型的转换不会造成数值的损失(例如不像double->int),那么进一步的思考过程就变得清晰了。
而这样的 "嘘声 "是在一个空旷的地方产生的。
事实上,选择 "傻瓜问题 "主题是为了得到解释,而不是训诫。
我在很多事情上都是个哑巴。所以我不明白,本应返回long的函数怎么会返回ULONG_MAX-1。肤浅地处理整数类型的陷阱,几乎在《手册》本身就有记载。sergeev 正确把握了问题 的原因:秩序控制。如果我指定request.magic为ulong,那么我希望HistoryDealGetInteger()、PositionGetInteger() 和OrderGetInteger() 函数也将返回ulong类型。没有任何显性-隐性的类型转换。
然而,如果他的 例子解释了long<->ulong类型的转换不会造成值的损失(与例如double ->int不同),那么进一步的思考过程就变得清晰了。
实际上,选择 "Dummie's Questions "主题的目的是为了阐明问题,而不是训斥。
你被冒犯了吗?对不起,我忍不住了。
事实上,它不是64位,而是只有63位(即不完整的8个字节)。如果使用整个长区,则为8个字节。
但不幸的是...
一方面,神奇的ulong 被传入MqlTradeRequest 结构。这意味着只能设置正值。
另一方面, PositionGetInteger/OrderGetInteger函数 返回 长 类型 。这意味着ulong 范围的一半被切断了。
事实上,我们所拥有的是63位,而不是上述的64位。实际上,这并不是什么坏事,而是对 秩序检查的原则造成了极大的不便 。
如果使用与MT4相同的系统会更方便--允许魔术师带牌子。由于许多交易系统是基于一个简单的原则,使用的正是魔术师的符号。因为把一个系统分成两个,用通常的MathAbs( OrderMagicNumber( ) ) 函数过滤出你的订单要容易得多。
所有64个。作为一个事实上的问题。不要拘泥于有符号或无符号的类型。这是为了让编译器确保算术运算的正确性(根据有符号的类型,有一个逻辑或算术的右移)。
在相同大小的数据的传输(分配)和无符号-无符号铸造过程中,没有信息丢失。试着来回跳动ULONG_MAX。试试长龙的任务,然后再回来。尝试结构复制。
最好的事情是为自己确定。那么这个问题就会一劳永逸地得到解决。
这是另一件需要考虑的事情。做到这一点!//报告结果。;)
完成了!用L.l = 4548887299649496524替换代码中的第14行。
从MqlTradeRequest 结构的描述中可以看出,magic是ulong类型的,即它可以被分配大于LONG_MAX 常数的值。 然而,在中国的功能...GetInteger() 函数被设计为与长类型一起工作,所以魔法值将被这些函数隐含地转换为长类型。但是,由于long和ulong类型的变量之间存在一对一的对应关系,当将魔法值与......的函数返回的结果进行比较时。GetInteger() 函数 , 我们可以安全地使用显式类型转换(例如:magic == (ulong)OrderGetInteger(ORDER_MAGIC) )。
谢谢你反复展示的例子。
stringo:
在数据传输(分配)和相同大小的数据的符号-无符号铸造过程中,任何地方都不会丢失信息。试着来回跳动ULONG_MAX。试试长龙的任务,然后再回来。尝试结构复制。说服你自己,不要传播神话。
我已经试过了,在强制类型时,它返回了必要的结果(好吧,也许还得额外做一次 "与钻石共舞")。但这并不那么重要)。
UncleVic:
我将把CExpert 类改成ulong。
我认为这是个好主意,那些在魔法中使用负值的人将不得不强行规定他们必须返回/设置什么。
如果文档中不只是表示long或ulong,而是表示这两种类型,那就非常好了(例如,这样 "long/ulong")。
在数据传输(赋值)过程中,或在相同大小的数据 的无符号铸造过程中,没有任何信息丢失。