【问题标题】:VB6 Mod function gives incorrect values with negative valuesVB6 Mod 函数给出了带有负值的错误值
【发布时间】:2015-07-02 04:26:15
【问题描述】:

我在 vb6 中的脚本中有一个步骤失败。代码如下

output = ((azmnum + steps ) mod 16777216)

函数中变量的值是

-850344 = (5184326 + -6034670) mod 16777216)

所有变量都是长数字。我将这些值输入到(python 和 excel)中的所有其他程序都返回 15926872。我无法弄清楚为什么模被忽略了。

【问题讨论】:

    标签: vb6 modulo


    【解决方案1】:

    mod 在所有语言中都不相同,尤其是对于负数。 VB6(以及大量其他编译器,如 C、C++、C#、Java)采用 Fortran 解释,即除法后的余数。从数学上讲,如果数字为负,这是错误的解释。你所拥有的是

    5184326 + -6034670 = -850344
    -850344 mod 16777216 = -850344 
    

    Python 和 excel 对模数进行正确解释,结果始终为正。这需要额外的步骤,即

    -850344 + 16777216 = 15926872
    

    【讨论】:

    • 哈哈,让我措手不及的是 -850344 / 2^24 的余数是 -850344。谢谢。
    • 不,很遗憾没有。与 C、C#、Java 和 Fortran 一样,vb6 中的模运算符仅对正数正确。您必须检查结果是否为负并添加 mod 值。
    猜你喜欢
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多