算术运算导致溢出 

ZoeToString 2010-11-15 04:55:44

Function big2little(ByVal code As System.Int32) As System.UInt64
Dim value As System.UInt64
value = _
((CType(code, System.UInt64) And CType(&HFFUI, System.UInt64)) << 24) _
Or ((CType(code, System.UInt64) And CType(&HFF00UI, System.UInt64)) << 8) _
Or ((CType(code, System.UInt64) And CType(&HFF0000, System.UInt64)) >> 8) _
Or ((CType(code, System.UInt64) And CType(&HFF000000UI, System.UInt64)) >> 24)
Return value
End Function


传进来的参数是 -2046820352
报错为 “算术运算导致溢出。”
为什么同样的方法用 C#写 传同样的参数  却不报错呢????求 高手解答
...全文
1278 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
QQRN 2010-11-16
  • 打赏
  • 举报
回复
因为C可以随便将任意类型按字节获取
比如INT16的-1 单字按二进制表示为 1111111111111111
如果是无符号65535 单字按二进制表示为 1111111111111111
在C看来Int32 和 UInt64 的按二进制看来也就是位数不同而已一个32位,一个64位,Int32 显示时候考虑下负数
但是在VB里面转换不是直接位COPY,还要校验数据
我个人觉得,C里面的数据,无论是什么类型的,都能当byte处理,VB里面就严格多了。

你的程序在C#里面传入的-2046820352 其实也就会被当做 18446744071662731264即 &HFFFFFFFF86000000

兔子-顾问 2010-11-16
  • 打赏
  • 举报
回复
4,5楼正确。看他们回复即可。
ZoeToString 2010-11-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wuyazhe 的回复:]

我觉得你先用
dim data as byte() = BitConverter.GetBytes(code)
然后用这个字节数组进行位操作比较容易也代码可读性好。
[/Quote]

那为什么用C#没有问题呢?(传同样的参数)
QQRN 2010-11-15
  • 打赏
  • 举报
回复
Int32 值类型表示值介于 -2,147,483,648 到 +2,147,483,647 之间的有符号整数
UInt64 值类型表示值介于 0 到 18,446,744,073,709,551,615 之间的无符号整数。

code=-2046820352
CType(code, System.UInt64)
负数你想转正数也不是这么转啊
xiagirl 2010-11-15
  • 打赏
  • 举报
回复
Function big2little(ByVal code As System.Int32) As System.UInt64

System.Int32: MinValue As UInteger = 0
MaxValue As UInteger = 4294967295

而你 传进来的参数是 -2046820352
所以咯。。。。。。。。。。
兔子-顾问 2010-11-15
  • 打赏
  • 举报
回复
我觉得你先用
dim data as byte() = BitConverter.GetBytes(code)
然后用这个字节数组进行位操作比较容易也代码可读性好。
兔子-顾问 2010-11-15
  • 打赏
  • 举报
回复
CType(&HFFUI, System.UInt64)) << 24)
为什么要这么做?
QQRN 2010-11-15
  • 打赏
  • 举报
回复
big2little(ByVal code As System.Int32) As System.UInt64
System.Int32 的范围是多大呢?

16,553

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧