You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Visual Basic .NET中实现有符号整数的零扩展

问题根因

VB 2010 默认会把不带类型后缀的&H80000000判定为32位有符号整数(Integer类型),这个值恰好是32位有符号整数的最小值,对应数值为-2147483648。当你把它赋值给64位有符号的Long类型变量时,编译器会自动执行有符号扩展,高位全部补1,最终就得到了&HFFFFFFFF80000000的结果。
你尝试用CULng转换报错的原因是,编译器在转换前就已经将&H80000000识别为负的Integer类型,而VB不允许将负整数赋值给无符号类型变量,所以直接触发了编译错误。

解决方法

直接给十六进制常量添加对应的类型后缀,强制编译器按你需要的类型解析即可,两种写法都可以:

  • 加L后缀,强制将常量识别为64位有符号整数(Long类型):
Dim a As Long = &H80000000L
  • 加UL后缀,强制将常量识别为64位无符号整数,再隐式转换为Long类型:
Dim a As Long = &H80000000UL

两种写法最终得到的a的值都是你预期的&H80000000,不会触发符号扩展。

内容的提问来源于stack exchange,提问作者user10328353

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:18:04