我在vb6中的脚本中有一个失败的步骤。代码如下
output = ((azmnum + steps ) mod 16777216)
函数中的变量值
-850344 = (5184326 + -6034670) mod 16777216)
所有变量都是长数字。我将这些值输入(python和excel)的所有其他程序返回15926872.我无法弄清楚为什么模数被忽略。
答案 0 :(得分:2)
mod在所有语言中都不相同,特别是对于负数。 VB6(以及其他编译器的整个负载,如C,C ++,C#,Java)采用Fortran解释,这是除法后的余数。在数学上,如果数字是负数,这是错误的解释。你拥有的是
5184326 + -6034670 = -850344
-850344 mod 16777216 = -850344
Python和excel采用模数的正确解释,结果总是正数。这需要额外的步骤,即
-850344 + 16777216 = 15926872