| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1607 人关注过本帖
标题:同样的语句,不同的机器,竟然结果不同
取消只看楼主 加入收藏
scilent
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:285
专家分:1399
注 册:2011-8-9
结帖率:100%
收藏
已结贴  问题点数:30 回复次数:7 
同样的语句,不同的机器,竟然结果不同
程序代码:
         local lcVol as string, lnSerial as interger
         lnSerial=7328823499
         lcVol=""
         newserial=bitxor(lnserial,12994069)
         newstr=alltrim(str(newserial))
         for js_k=1 to len(newstr) step 2
            lcVol=lcVol+chr(val(substr(newstr,js_k,2)))
         ENDFOR
这是程序的一小段,我昨天在两个机器上试了试,本来一样的代码结果不一样,后来逐条测试,原来是这个地方出问题,确切说是lcVol=lcVol+chr(val(substr(newstr,js_k,2)))这个语句之后,lcVol的值相差很远,老师们有遇到的吗?能帮我看一下吗
 

[ 本帖最后由 scilent 于 2013-8-15 12:09 编辑 ]
2013-08-15 11:59
scilent
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:285
专家分:1399
注 册:2011-8-9
收藏
得分:0 
大家看到了运行一下,把结果贴出来,看看一样不一样。是不是我在其他地方弄错了

在没有路的地方走一条路,让别人有路可走
2013-08-15 12:19
scilent
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:285
专家分:1399
注 册:2011-8-9
收藏
得分:0 
以下是引用taifu945在2013-8-15 12:53:12的发言:

我看了一下你的代码,感觉问题可能不是出在你说的那句,你说的那句是表象。我估计问题出在第二行:lnSerial=7328823499。为什么呢?你把lnSerial设置成了整型,而整型的上限值是2的32次方,也就是4,294,967,296。你在第二行对变量lnSerial赋的值显然已经超过整型的上限值,虽然运行时不会出错,但不同的机器硬件对溢出值的处理方式可能不同,于是造成了你看到的结果。
我觉得,非常有道理,以前没有注意这个问题,谢谢指点

在没有路的地方走一条路,让别人有路可走
2013-08-15 12:59
scilent
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:285
专家分:1399
注 册:2011-8-9
收藏
得分:0 
以下是引用TonyDeng在2013-8-15 12:54:22的发言:

出错在第5行,for前面那一行!
我又长见识了,看来还得修炼内功才行,谢谢指点

在没有路的地方走一条路,让别人有路可走
2013-08-15 13:01
scilent
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:285
专家分:1399
注 册:2011-8-9
收藏
得分:0 
以下是引用TonyDeng在2013-8-15 12:58:42的发言:

一看用了位异或运算,这代码就没什么意思。位运算之后,那个序列号是负数,加上负号,是11位字符,而str()函数默认是10位字符,到后面的newstr字符串只有4个字符,但他又在循环中每次提取2个字符作chr()字符——显然当汉字用——最后都不知道想干什么。整个运算绕来绕去,把简单的事情搞复杂。
谢谢您的指导。没有注意的位数的问题。真是太感谢了
你说得对,就是想搞复杂点,可是玩过火了。

在没有路的地方走一条路,让别人有路可走
2013-08-15 13:03
scilent
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:285
专家分:1399
注 册:2011-8-9
收藏
得分:0 
以下是引用taifu945在2013-8-15 13:02:49的发言:


谈不上指点。我只是凭第一感觉,没有实测你的程序,你可以用调试窗口一条条运行代码,然后在监视窗口把几个重点变量监控一下,观察它们值的变化是否符合你的预期。另外,你第一句中的“Interger”写错了,整型的英语是“Integer”。
谢谢,太心焦了弄错了。虽然您 没有试,但您一说到值的问题,我马上想到问题可能出什么地方,对我有启发!

在没有路的地方走一条路,让别人有路可走
2013-08-15 13:08
scilent
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:285
专家分:1399
注 册:2011-8-9
收藏
得分:0 
回复 16楼 TonyDeng
昨天我在逐条测试的时候,发觉那个 地方有问题,不知道为什么 。
vfp说明很早的时候看过,现在基本上是用到哪儿看哪儿。我只有6.0的说明,在str()中没有提到位数的问题,所以也就忽略了。您一行行给我演示,再次感谢。

在没有路的地方走一条路,让别人有路可走
2013-08-15 13:24
scilent
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:285
专家分:1399
注 册:2011-8-9
收藏
得分:0 
谢谢老大!已经搞定
改问题不难,难在不知道错在什么地方
ps:顺便告诉大家,我测试 的结果,一旦数值超过2000000000,后面的结果就出错。不知道怎么会是这个数?

[ 本帖最后由 scilent 于 2013-8-15 20:44 编辑 ]

在没有路的地方走一条路,让别人有路可走
2013-08-15 20:40
快速回复:同样的语句,不同的机器,竟然结果不同
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022449 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved