VB6 Mod函数使用负值给出不正确的值

VB6 Mod函数使用负值给出不正确的值,vb6,modulo,Vb6,Modulo,我在vb6中的脚本中有一个步骤失败。代码如下 output = ((azmnum + steps ) mod 16777216) 函数中变量的值为 -850344 = (5184326 + -6034670) mod 16777216) 所有变量都是长数字。我输入这些值的所有其他程序(python和excel)返回15926872。我不明白为什么模被忽略了。mod在所有语言中都不一样,尤其是负数。VB6(以及其他编译器的全部负载,如C、C++、C、java),在FORTRAN解释后,是剩余的

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

output = ((azmnum + steps ) mod 16777216)
函数中变量的值为

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

所有变量都是长数字。我输入这些值的所有其他程序(python和excel)返回15926872。我不明白为什么模被忽略了。

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值。