| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1607 人关注过本帖
标题:同样的语句,不同的机器,竟然结果不同
只看楼主 加入收藏
scilent
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:285
专家分:1399
注 册:2011-8-9
结帖率:100%
收藏
已结贴  问题点数:30 回复次数:22 
同样的语句,不同的机器,竟然结果不同
程序代码:
         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
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:15 
str()字符串超宽了

授人以渔,不授人以鱼。
2013-08-15 12:47
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
不知道你想测试什么,这是玩语言的代码。

授人以渔,不授人以鱼。
2013-08-15 12:50
whinda
Rank: 6Rank: 6
等 级:贵宾
威 望:13
帖 子:253
专家分:418
注 册:2012-2-4
收藏
得分:0 
两台机器的代码页环境是一样的么?,用CPCURRENT()查一下。
2013-08-15 12:52
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:15 
我看了一下你的代码,感觉问题可能不是出在你说的那句,你说的那句是表象。我估计问题出在第二行:lnSerial=7328823499。为什么呢?你把lnSerial设置成了整型,而整型的上限值是2的32次方,也就是4,294,967,296。你在第二行对变量lnSerial赋的值显然已经超过整型的上限值,虽然运行时不会出错,但不同的机器硬件对溢出值的处理方式可能不同,于是造成了你看到的结果。
2013-08-15 12:53
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
出错在第5行,for前面那一行!

授人以渔,不授人以鱼。
2013-08-15 12:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
一看用了位异或运算,这代码就没什么意思。位运算之后,那个序列号是负数,加上负号,是11位字符,而str()函数默认是10位字符,到后面的newstr字符串只有4个字符,但他又在循环中每次提取2个字符作chr()字符——显然当汉字用——最后都不知道想干什么。整个运算绕来绕去,把简单的事情搞复杂。

授人以渔,不授人以鱼。
2013-08-15 12:58
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
快速回复:同样的语句,不同的机器,竟然结果不同
数据加载中...
 
   



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

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