我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: [屏蔽]编程的一个小问题!! 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

预言



性别: 帅哥 状态: 该用户目前不在线
等级: 栋梁之材
家族: YD一族
发贴: 896
威望: 0
浮云: 2213
在线等级:
注册时间: 2007-03-14
最后登陆: 2011-05-20

5come5帮你背单词 [ pause /po:z/ n. & vi. 中止,暂停 ]


[屏蔽]编程的一个小问题!!

  for(j=0;j<str;j++)
{
  ch=xx[j];
  if(ch<<4 <=32 || ch<<4 >100)
  continue;     
  else  xx[j]+=ch<<4;
-------------------------------------------
for(j=0;j<str;j++)
{
ch=xx[j]<<4;
if(ch <=32 || ch >100)
continue;            
else    xx[j]+=ch;

以上是两小段程序,不同之处就是有颜色的部分,但是我觉得这没什么不同,但是运行的结果不一样,问题出在哪里呢? 请懂的人赐教 ! 非常谢谢!!
顶端 Posted: 2008-03-30 22:55 | [楼 主]
adou





性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
发贴: 485
威望: 0
浮云: 1139
在线等级:
注册时间: 2006-03-03
最后登陆: 2010-10-14

5come5帮你背单词 [ rectify /'rektifai/ vt. 纠正,调整,校正 ]


加法(+)的优先级比右移的高,所以
xx[j]+=ch<<4;
实际是:xx[j]=(xx[j]+ch)<<4
顶端 Posted: 2008-03-30 23:20 | [1 楼]
adou





性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
发贴: 485
威望: 0
浮云: 1139
在线等级:
注册时间: 2006-03-03
最后登陆: 2010-10-14

5come5帮你背单词 [ massive /'mæsiv/ a. 巨大的,大量的,大规模的,魁伟的,结实的 ]


Quote:
引用第8楼快乐天使于2008-03-30 23:21发表的  :
应该是ch<<4 <=32 || ch<<4 >100出问题
执行这句时,如果前面一句不为真,则执行下一句,这是ch已经变了,再用一个变量试一下


对,这也有问题
顶端 Posted: 2008-03-30 23:26 | [2 楼]
adou





性别: 帅哥 状态: 该用户目前不在线
等级: 品行端正
发贴: 485
威望: 0
浮云: 1139
在线等级:
注册时间: 2006-03-03
最后登陆: 2010-10-14

5come5帮你背单词 [ breathe /bri:ð/ v. 呼吸 ]


调试了一下,应该是溢出问题
1).
ch=xx[j];
if(ch<<4 <=32 || ch<<4 >100)

2).
ch=xx[j]<<4;
if(ch <=32 || ch >100)
并不等效
例:j=0,xx[j]='c',
对1)ch='c',(!!)ch<<4的值为1584
if(ch<<4 <=32 || ch<<4 >100)的值为1
对2)ch='0',(!!)xx[j]='c',(赋值时产生溢出!!!)
if(ch <=32 || ch >100)的值为0
所以造成操作不用附程序截图:


[ 此帖被adou在2008-04-01 13:21重新编辑 ]
远程图片:program2.JPG 远程图片:program1.JPG
顶端 Posted: 2008-04-01 13:14 | [3 楼]
我来我网·5come5 Forum » 程序员之家

Total 0.010682(s) query 6, Time now is:11-24 21:17, Gzip enabled
Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号