VB中的long类型

me9931 2012-07-15 12:12:21
下面这段代码不明白:

Dim a As Long

a = &H8000

text1.text = a

最后显示的却是-32768...怎么变成short型了...

数据扩大一下,改成

Dim a As Long

a = &H230000

text1.text = a

显示又正常了,是个正数了,不明白,求指点
...全文
1305 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
东方之珠 2012-07-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
下面这段代码不明白:

Dim a As Long

a = &H8000

text1.text = a

最后显示的却是-32768...怎么变成short型了...

数据扩大一下,改成

Dim a As Long

a = &H230000

text1.text = a

显示又正常了,是个正数了,不明白,求指点
[/Quote]
原因很简单,Long类型是4字节长度,&H8000只有2字节,后面需要加&显式转换成Long型(为什么不能隐式转换成Long呢,因为&H8000需要经过计算才能得出结果,本身只有2字节,是integer类型,如果写成a=32768就不需要计算了,后面也不需要加&显式转换);而&H230000已经超过2字节了,就当成Long型了,不需要加&。这2点在 VB IDE 下可以验证,超过2字节的常量在IDE下会自动去掉后面加的&符号。

看看MSDN:
Long(长整型)变量存储为 32 位(4 个字节)有符号的数值形式,其范围从 -2,147,483,648 到 2,147,483,647。Long 的类型声明字符为和号 (&)。

bcrun 2012-07-16
  • 打赏
  • 举报
回复
另一种说法,就是对于一般的编程语言,如“323,&H8000,0x8000"这样的都叫做“直接量”,编译系统识别这种量的数值类型时,一般是尽量匹配占内存空间小的类型,所以当数值是16进制表示,又落在较小的类型范围内时,就最好要指定类型,免得产生错误。
lliai 2012-07-16
  • 打赏
  • 举报
回复
&H8000&,后面的&是强制类型为long,
赵4老师 2012-07-16
  • 打赏
  • 举报
回复
常量也有类型!
熊孩子开学喽 2012-07-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
下面这段代码不明白:

Dim a As Long

a = &H8000

text1.text = a

最后显示的却是-32768...怎么变成short型了...

数据扩大一下,改成

Dim a As Long

a = &H230000

text1.text = a

显示又正常了,是个正数了,不明白,求指点
[/Quote]

因为在&H8000的时候已经是int型的负数了, 等赋值给a的时候当然还是负数.
1楼&H8000&,后面的&是强制类型为long, 这时就对了
贝隆 2012-07-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
VB中 &H表示为16进制

代码改为:
Dim a As Long
a = &H8000& (注意后在多一个&)
text1.text = a
[/Quote]

因为&H8000默认情况下是int类型,也就是 -32768 ,如果你显式的将其定义为 Long就不存在这个问题了,&H8000&就是显式的声明其为Long类型。
奔跑的油条 2012-07-15
  • 打赏
  • 举报
回复
VB中 &H表示为16进制

代码改为:
Dim a As Long
a = &H8000& (注意后在多一个&)
text1.text = a

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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