请问下面两个c程序段不同在哪?

来源:百度知道 编辑:UC知道 时间:2024/06/24 17:33:43
源:
for(i=0;i<maxline;i++) /*以行为单位获取字符*/
{
str=strlen(xx[i]); /*求得当前行的字符串长度*/
for(j=0;j<str;j++)
{
ch=xx[i][j];
if(ch<<4<=32 || ch<<4>100)
continue; /*如果左移4位后字符的ASCII值小于等于32或大于100,则原字符保持不变*/
else
xx[i][j]+=ch<<4; /*否则就把左移后的字符ASCII值加上原字符的ASCII*/
}
}
我编的:
for(i=0;i<maxline;i++) /*以行为单位获取字符*/
{
str=strlen(xx[i]); /*求得当前行的字符串长度*/
for(j=0;j<str;j++)
{
ch=xx[i][j]<<4;
if(ch<=32 || ch>100)
continue; /*如果左移4位后字符的ASCII值小于等于32或大于100,则原字符保持不变*/
else
xx[i][j]+=ch; /*否则就把左移后的字符ASCII值加上原字符的ASCII*/
}
}
我如何也看不出来差别,但运行结果就是不一样,请大家不吝指教!不胜感激!

贴个完整的程序来看看,能编译通过的

尼玛,这是穿越了么???神马情况!!?!2009 !!
穿越一次不容易,两段代码是一样的。
第一个,在过程中进行位移判断处理;
第二个,先保存位移后的临时变量,比较处理,个人觉得这种方式好写,虽然位移这可以忽略不计,但如果要求简洁、高效的话,还是先保存在进行后面的处理为好。

程序到数第七行ch=xx[i][j]<<4;
if(ch<=32 || ch>100)
; 源程序ch=xx[i][j];
if(ch<<4<=32 || ch<<4>100)
运算顺序不同

贴个完整的程序来看看,能编译通过的

估计你看下 <= 跟<<优先 顺序就知道了