这是快速片段和&结果:
VB.NETDim MSB As UInt32 = 3067297518Dim LSB As UInt32 = 1439785590Dim sqln As UInt64 = MSB * (2 ^ 32) + LSB Python:sqln = msb * (2 ** 32) + lsbPython Result: 13173942528351756918VB RESulT: 13173942528351756288
注意:我也尝试将sqln声明为ulong和Double(相同的答案)
MSB和LSB在两个调试器中都匹配 – !! ??
有任何想法吗?我的谢谢
杰出的乔恩 – 非常雄辩和优秀有用!
一个小小的跟进你可以建议最后一块的修复吗?即使你让我的sqln理顺了,我相信也会发生同样的事情:)
python says: = bdntyxtax2smqvb.net says: = bfpuzytbx3s00VB.NETDim sqlID As String = ""Dim Alphabet As String = "0123456789abcdfghjkmnpqrstuvwxyz"For iCount = 0 To 12 sqlID = Alphabet((sqln / (32 ^ iCount)) Mod 32) + sqlIDNextPython:for i in range(0,13): sqlID = Alphabet[(sqln / (32 ** i)) % 32] + sqlID解决方法 我已经将你的VB代码反编译为C#,它看起来像这样:
uint MSB = 0xb6d33eee;uint LSB = 0x55d16276;ulong sqln = (ulong) Math.Round((double) ((num2 * 4294967296) + num));
这是因为VB中的power operator总是返回一个Double:
The result is number raised to the power of exponent,always as a Double value.
我建议使用移位运算符,并将所有变量设为UInt64,以便将移位完成为64位整数:
Dim MSB As UInt64 = 3067297518Dim LSB As UInt64 = 1439785590Dim sqln As UInt64 = (MSB << 32) + LSB
这给出了正确的答案. (你实际上并不需要LSB成为UInt64,但你也可以用64位整数来做所有事情.)
总结以上是内存溢出为你收集整理的vb.net – 在进行大数学时,UInt64会变得不确定吗?全部内容,希望文章能够帮你解决vb.net – 在进行大数学时,UInt64会变得不确定吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)