VB的BUG??大家进来看一段很小的程序.

pigsanddogs 2005-06-22 10:48:17
放一个button,写下面代码
Private Sub Command1_Click()
Dim nOffset As Integer
Dim pOffset As Integer
Dim tOffset As Integer

nOffset = -17940
pOffset = 334
MsgBox nOffset
tOffset = (nOffset + pOffset) Mod 512
MsgBox tOffset
End Sub

编译成exe执行.
msgbox的结果分别为 -17940. 314.

把MsgBox nOffset删除,重新编译成exe执行.
msgbox的结果为 -198.

vb6+sp6 英文企业版.结果如上.
...全文
461 42 打赏 收藏 转发到动态 举报
写回复
用AI写文章
42 条回复
切换为时间正序
请发表友善的回复…
发表回复
LIQIAN1024 2005-06-27
  • 打赏
  • 举报
回复
应该没问题
qyqzxz1 2005-06-27
  • 打赏
  • 举报
回复
类似的问题估计在c种不会出现。
haen_zhou 2005-06-27
  • 打赏
  • 举报
回复
好问题,发现这么重大的问题...
samwzhang 2005-06-27
  • 打赏
  • 举报
回复
晕倒了,-198和314不都是对的么?
198+314=512的,大家就楞没注意么?
thinkeasy 2005-06-26
  • 打赏
  • 举报
回复
如果把Integer换成Long就没有问题了
thinkeasy 2005-06-26
  • 打赏
  • 举报
回复
homezj(小吉) 说的对。
VB虽然对变量要求不是很严格,但变量的类型还有是的影响的。
zhujiechang 2005-06-26
  • 打赏
  • 举报
回复
确实是大BUG,解释环境和编译环境计算得出了不同的结果。
谁还敢拿VB来做这样的计算啊,昏。特殊要求的朋友应该注意。
DooDu 2005-06-26
  • 打赏
  • 举报
回复
编译执行是编译成p-代码执行,而解释执行是编译成本机码。
至于两中方式造成的差异的原因,小吉已经说的很明白了,请仔细看。
mingtian2008 2005-06-26
  • 打赏
  • 举报
回复
up
qyqzxz1 2005-06-26
  • 打赏
  • 举报
回复
我试了,发现有此问题,编译成exe文件后结果与解释时不一致,什么原因呢?请高手明示。
w3k 2005-06-25
  • 打赏
  • 举报
回复
win2(server)英文+vb(sp6)英文
测试没问题
optop 2005-06-25
  • 打赏
  • 举报
回复
我的是日文系統,也是出現同樣的情況!
pigsanddogs 2005-06-24
  • 打赏
  • 举报
回复
nOffset = -17940超出integer所表示的范围。
===================
并没有超过integer的范围, 如果超过了肯定报错
Integer variables are stored as 16-bit (2-byte) numbers ranging in value from -32,768 to 32,767
bwldwb6 2005-06-24
  • 打赏
  • 举报
回复
好问题,发现这么重大的问题了
homezj 2005-06-24
  • 打赏
  • 举报
回复
不算Bug,
1、这是本机码编译时对存在岐义的数值类型的必然选择,因为本机码编译时,若选择“代码速度优化”,在遇到不确定类型的整数时,它会优先按32位CPU最擅长的Long型处理。P代码编译或本机码选“代码大小优化”及“无优化”时均无此问题。

2、msgbox 时不传原变量地址,也无此问题,如改成:MsgBox (nOffset) 就会正常了。

3、不取&H8000-&HFFFF之间的值(因为这段数值在Long与Integer中意义不同),也不会有此问题。

平时注意对传址类参数(Byref)严格按所需类型传递,可有效防止本机码编译中这些岐义的产生。如:MsgBox需要的是一个字符串,却生硬地给它一个数值,让它看着办,它当然会给你点“颜色”看。

还有一点个人经验:若打算本机码编译,整数尽量用Long,而不使用Integer类型,是一个好习惯。(这点不奢求大家都能接受)
thirdapple 2005-06-24
  • 打赏
  • 举报
回复
Integer的问题吧
atestya 2005-06-24
  • 打赏
  • 举报
回复
up
56625079 2005-06-24
  • 打赏
  • 举报
回复
看了ningkang(搜索客)链的文章,应该是符号溢出
jxgzay 2005-06-24
  • 打赏
  • 举报
回复
的确有趣!Msgbox可以影响最终结果。
而且解析执行和编译后执行结果也不一样。
shala99 2005-06-24
  • 打赏
  • 举报
回复
up
加载更多回复(22)

7,762

社区成员

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

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